Единственный маршрут, дающий 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 ответ:
С подсказкой, что вы можете получить доступ к
{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
. Если есть, удалите его и повторите попытку.