Единственный маршрут, дающий 403 запрещенную ошибку в Laravel 4


Я пытался понять, почему это происходит в течение последних нескольких дней, но безуспешно. Я нашел еще несколько вопросов, касающихся 403 ошибок при маршрутизации в Laravel, но ни один из них не относится к проблеме с одним маршрутом. Несколько новый для Laravel и веб-разработки, так что, возможно, не хватает чего-то очевидного, но вот:

Таким образом, маршруты в моем проекте работают все, кроме одного, этот маршрут является {mywebsite}/admin, что дает мне ошибку 403. Он делает работу, когда я перейдите в раздел {mywebsite} / index.на PHP/админ. Чего я не понимаю, так это почему ни один из моих других маршрутов не имеет такой же проблемы. Например, {сетевом}/тест строительство и {сетевом} категории/администратор/работы. Это буквально единственный маршрут, который не работает. Также стоит отметить, что одна и та же проблема возникает при попытке доступа к нему как на моем локальном сервере, так и на моем рабочем сервере (Digital Ocean с Laravel Forge).

Вот мои маршруты.php файл:

Route::get('/', function()
{
    return View::make('hello'); //works
});

Route::get('/admin', function()
{
    return "admin"; //403 error
});

Route::get('/test', function()
{
    return "test"; //works
});


//these all work
Route::get('/admin/dashboard', 'TaskCategoriesController@showAdmin');

// all category routes
Route::get('/admin/categories/', 'TaskCategoriesController@show');
Route::get('/admin/categories/{id}/edit', 'TaskCategoriesController@edit');
Route::post('/admin/categories/{id}/edit/', array('uses' =>    'TaskCategoriesController@update'));
Route::post('/admin/categories/create/{id}', array('uses' => 'TaskCategoriesController@create'));
Route::get('/admin/categories/delete/{id}', array('uses' => 'TaskCategoriesController@delete'));

Route::get('/admin/categories/create', function()
{
    return View::make('CreateCategory');
});

// all form routes
Route::get('/admin/forms/{id}/edit', 'TaskFormsController@edit');
Route::post('/admin/forms/{id}', 'TaskFormsController@create');
Route::post('/admin/forms/{id}/submit', 'OrdersController@submitOrder');
Route::get('/admin/forms/{id}/add', 'TaskFormsController@addFormElement');
Route::get('/admin/forms/{id}/edit/{elementId}', 'TaskFormsController@editFormElement');
Route::get('/admin/forms/{id}/delete/{elementId}', 'TaskFormsController@deleteFormElement');
Route::post('/admin/forms/{id}/saveUpdates/{tid}', 'TaskFormsController@updateFormElement');


//time table routes
Route::post('/admin/categories/{id}/timetable/{date}', array('uses' => 'TimeTableController@updateTimetable'));
Route::get('/admin/categories/{id}/timetable', array('uses' => 'TimeTableController@timetable'));
Route::get('/admin/categories/{id}/timetable/{date}', array('uses' => 'TimeTableController@editWeekTable'));

А вот мой .htaccess файл:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>
Есть ли у кого-нибудь хоть малейшая догадка, почему это происходит?
1 4

1 ответ:

С подсказкой, что вы можете получить доступ к {mywebsite}/index.php/admin в то время как другие маршруты работают нормально, означает, что ваш маршрут Laravel И.htaccess файл работает.

Так что проблема, вероятно, от .htaccess пропуская url переписывает только для url {mywebsite}/admin, связанного с этими тремя строками:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

Первые две строки выше говорят apache не переписывать url в индекс Laravel.php, если запрошенный url указывает на существующий файл или папку. Тот факт, что он показывает 403 запрещен, скорее всего, потому, что apache пытается каталог-список /admin папки, но это запрещено делать.

Поэтому решение состоит в том, чтобы убедиться, что у вас нет папки app/public/admin. Если есть, удалите его и повторите попытку.