我正在使用 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/