我在Laravel的第一个项目中工作,这是一个带管理面板的简单网站:
在我的“public”文件夹中,我有一个名为“admin”的目录,其中我将所有样式和脚本对应于管理面板。我还在我的应用程序中定义了一个路径来处理“admin”GET:
Route::get('/admin', 'Admin\DashboardController@index');
问题是因为我的公共目录中有“admin”文件夹,Laravel忽略了我定义的“admin”路由,所以我无法访问正确的控制器。我怀疑它与.htaccess有关,但我不知道如何解决它。这就是我的htaccess现在的样子:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
答案 0 :(得分:2)
您不能拥有与您的路线同名的公共目录 - 否则Laravel将如何知道“/ admin”是用于控制器还是用于样式等。
您应该将管理样式表等存储在/ assets / admin / *
下答案 1 :(得分:1)
问题在于以下几行:
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>
答案 2 :(得分:-1)
对于routes.php:
Route::controller('admin/dashboard', 'Admin\DashboardController');
要在公共容器中使用资源,您现在可以使用:
<script type="text/javascript" src="{{Request::root();}}/assets/js/jquery.js"></script>
/public/assets/js/jquery.js中的资产
希望这有帮助。