这是刚刚发生的令人困惑的事件序列。
1)我有一个正常运行的Laravel安装,其中包含空 .htaccess
文件,所有网址均可用。
2)我向.htaccess
添加一些规则只是为了玩一下,然后删除规则。
3)现在我再次有一个空的.htaccess
(所以与上面的步骤1相比没有任何变化)但现在除了主页之外没有任何URL工作了。
例如,您将看到http://jovansprojects.com/march_madness/正常工作(这是Laravel文件夹的根目录),使用此路线:
Route::get('/', 'HomeController@showWelcome');
但http://jovansprojects.com/march_madness/login不再适用,尽管之前已经正常工作。
这是相关路线:
Route::get('login', 'SessionsController@create');
请注意,它不会抛出Laravel错误,例如“未找到异常”#35; - 它似乎根本不知道Laravel是安装在那里的。
我已根据一些在线建议尝试清除Artisan的缓存,但没有帮助。
所以,总结一下:.htaccess
与以前完全相同(空)但似乎服务器甚至不知道要求Laravel再处理这些URL,而不是在主页之外反正。
这些是我添加的规则,然后从.htaccess中删除(我想重定向尾部斜杠):
Options -MultiViews
RewriteEngine On
RewriteBase /march_madness/
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ $1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
我怀疑RewriteBase
可能与它有关,但在我删除规则之后,为什么它没有恢复到原来的状态?
答案 0 :(得分:0)
似乎Laravel确实需要.htaccess中的“前端控制器”,以便能够路由“漂亮”的URL(即,不必在URL中使用index.php
并依赖于PATH_INFO)。
因此,至少在.htaccess文件中需要类似以下内容(可能在Laravel安装的根目录中):
RewriteEngine On
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
似乎有两个.htaccess。请注意,.htaccess文件是沿文件系统路径继承的。但是,默认情况下不会继承mod_rewrite(上面指令所属的)。因此,如果在子目录中启用重写引擎,则将忽略父目录中的mod_rewrite指令。