在.htaccess更改后,Laravel无法识别

时间:2015-09-23 11:35:37

标签: php .htaccess laravel redirect laravel-4

这是刚刚发生的令人困惑的事件序列。

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可能与它有关,但在我删除规则之后,为什么它没有恢复到原来的状态?

1 个答案:

答案 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指令。