在Laravel 4中给出403禁止错误的单路径

在Laravel 4中给出403禁止错误的单路径,laravel,laravel-4,laravel-routing,Laravel,Laravel 4,Laravel Routing,我一直在试图弄明白为什么在过去的几天里发生了这种情况,但没有成功。我还发现了一些其他问题,这些问题涉及在Laravel中进行路由时出现的403个错误,但没有一个问题涉及到单一路由的问题。对于Laravel和web开发来说有些陌生,因此可能会遗漏一些明显的东西,但下面是: 因此,我的项目中的所有路由都可以工作,只有一个除外,该路由是{mywebsite}/admin,这给了我一个403错误。当我转到{mywebsite}/index.php/admin时,它确实起作用。我不明白的是为什么我的其他路

我一直在试图弄明白为什么在过去的几天里发生了这种情况,但没有成功。我还发现了一些其他问题,这些问题涉及在Laravel中进行路由时出现的403个错误,但没有一个问题涉及到单一路由的问题。对于Laravel和web开发来说有些陌生,因此可能会遗漏一些明显的东西,但下面是:

因此,我的项目中的所有路由都可以工作,只有一个除外,该路由是{mywebsite}/admin,这给了我一个403错误。当我转到{mywebsite}/index.php/admin时,它确实起作用。我不明白的是为什么我的其他路线都没有同样的问题。例如,{mywebsite}/test可以工作,{mywebsite}/admin/categories可以工作。这实际上是唯一一条不起作用的路线。另外值得注意的是,当试图在本地服务器和生产服务器(Digital Ocean with Laravel Forge)上访问它时,也会出现同样的问题

以下是我的routes.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[L,R=301]
#处理前控制器。。。
重写cond%{REQUEST_FILENAME}-D
重写cond%{REQUEST_FILENAME}-F
重写规则^index.php[L]

有人知道为什么会发生这种情况吗

提示您可以访问
{mywebsite}/index.php/admin
,而其他路由工作正常,这意味着您的Laravel路由和.htaccess文件正在工作

因此,问题可能来自.htaccess跳过仅针对url
{mywebsite}/admin
的url重写,与以下三行相关:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
上面的前两行告诉apache,如果请求的url指向现有文件或文件夹,则不要将url重写到Laravel的index.php。显示403禁止的事实很可能是因为apache正在尝试目录列表
/admin
文件夹,但禁止这样做


因此,解决方案是确保您没有文件夹
app/public/admin
。如果有,请将其删除并重试。

您的
app/public
文件夹中是否有名为
admin
的文件夹?如果是这样,您将要删除该文件夹。url重写可能被跳过,因为目录存在,并且它试图将目录列表
app/public/admin
文件夹删除,但被禁止这样做。@unawut哇,是的。这就是问题所在。非常感谢你!彼此彼此。。。记住清除浏览器缓存,因为永久重定向挂起在浏览器缓存上!我有一个文件夹名为
admin
,我笑了。谢谢每当我调用路由{base_url}/admin 403时,我在公用文件夹中有一个名为
admin
的目录,我也会发生同样的事情