以下代码
Route::get('test/{n}', function ($n) {
return $n;
});
App::missing(function () {
return Response::make("Dude, that's a 404 !", 404);
});
适用于
之类的任何内容http://localhost/myproject/public/test/something
但是
http://localhost/myproject/public/test/
重定向到
http://localhost/test
我认为它应该显示
Dude, that's a 404 !
我可能错误地搜索了SO论坛,但有没有人对这种奇怪的行为有解释?
编辑:@Mohammad Walid
好的,所以,我将routes.php更改为:
Route::get('/', 'HomeController@showWelcome');
Route::get('test', function () {
return 'test';
});
App::missing(function () {
return Response::make("Dude, that's a 404 !", 404);
});
我没有删除了您在public/.htaccess
中谈到的那一行。
这有效:
base_url/test
但这并不是(重定向到localhost/test
):
base_url/test/
怎么可能,因为你说删除该行会删除该功能?
EIDT 2:
由于事实证明问题来自MAMP没有正确解释尾部斜线重定向条件,因此在MAMP错误库中创建了错误报告:
答案 0 :(得分:2)
及其'因为Laravel默认重定向尾部斜杠。
在 app / public / .htaccess 文件中,您可以找到以下内容:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301] #This line causes the problem
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
将其更改为:
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
查看trailing slashes discussion。
注意如果删除上一行,您的应用程序将无法处理尾随斜杠。 防爆。如果你有路线
Route::get('test', function() {
return 'test';
}
假设已请求base_url/test/
而不是base_url/test
服务器将以404状态回复。
<强>更新强>
似乎这个问题只发生在本地开发中(我使用XAMPP)。
该规则的预期结果如下:
.htaccess
RewriteRule ^(.*)/$ /$1 [L,R=301]
Input (request)
http://localhost/website/test/
Output (after redirect)
http://localhost/website/test
但我们在本地发展中实际拥有的是:
.htaccess
RewriteRule ^(.*)/$ /$1 [L,R=301]
Input (request)
http://localhost/website/test/
Output (after redirect)
http://localhost/test #this is wrong, according to the rule above it should redirects to http://localhost/website/test
如果您删除规则,那么您将拥有以下内容:
Request
http://localhost/website/test
Response
test
Request
http://localhost/website/test/
Response
Status 404
Dude, that's a 404 !
The expected response:
test
这就是我的意思
您的应用程序无法处理尾随斜杠。
服务器将以404状态响应。
我已经使用online htaccess tester测试了该规则并且它按预期工作,这就是为什么我认为问题仅存在于本地开发中。