laravel - 实际目录覆盖 Laravel 路由

标签 laravel laravel-4

我正在使用 Laravel 开发我的第一个项目,这是一个带有管理面板的简单网站:

在我的“公共(public)”文件夹中,有一个名为“admin”的目录,其中放置了与管理面板相对应的所有样式和脚本。我还在我的应用程序中定义了一条路由来处理“admin”GET:

Route::get('/admin', 'Admin\DashboardController@index');

问题是,由于我的公共(public)目录中有“admin”文件夹,Laravel 忽略了我定义的“admin”路由,所以我无法访问正确的 Controller 。我怀疑它与 .htaccess 有关,但我不确定如何解决它。这是我的 htaccess 现在的样子:

<IfModule mod_rewrite.c>
    Options -MultiViews
    RewriteEngine On

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

最佳答案

问题在于以下行:

RewriteCond %{REQUEST_FILENAME} !-d

在您的示例中,这告诉 Web 服务器不要将/admin 路由发送到 Laravel,因为它是一个物理目录。如果删除它,那么/admin 路由应该可以工作。然而,这将阻止直接浏览到文件夹并获取目录列表,这应该不是问题。 htaccess 中的下一行将允许您链接到管理目录中包含的资源文件,并且不会让 Laravel 处理它们,因此不应将其删除。

新版本的 Laravel 还包含:

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

应将其更新为以下内容,以避免管理路由上的重定向循环:

# Redirect Trailing Slashes...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)/$ /$1 [L,R=301]

因此,如果使用最新版本的 Laravel,您的 htaccess 文件应如下所示:

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

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

关于laravel - 实际目录覆盖 Laravel 路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063959/

相关文章:

php - Laravel 阻止 updated_at 更新特定查询

Laravel Composer 更新错误 - 权限被拒绝

laravel-4 - 在 migrate laravel 中的同一张表上创建多个外键

unit-testing - 在 Laravel 中单元测试 Controller 而不测试路由的最佳方法是什么

php - 发送 STMT_PREPARE 数据包时出错。 PID=2

sublimetext2 - Sublime Text 2 中 Laravel Blade 模板引擎的语法高亮显示

php - 如果不存在相关模型,Laravel 只会删除模型

laravel - 如何在 Laravel4 中使用 withErrors 处理异常错误消息?

php - 如何保护 PHP 中的管理面板?

mysql - Laravel 添加选择查询返回错误结果