我已经为此工作了几个小时,但找不到相关信息。嗯,是的,有信息,但我只能找到单独的解决方案,这些解决方案组合起来不起作用。
我试图从这里开始:
RewriteCond %{REQUEST_URI} \.(php)$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.example.com/$1/ [L,R=301]
代码有效,我得到了尾部斜杠。但是如果我输入一个不存在的文件名,它会返回 301。例如:
http://www.example.com/thisfiledoesnotexist.php
第一个 header 响应是 301,这是合乎逻辑的,因为它尝试返回:
http://www.example.com/thisfiledoesnotexist.php/
然后返回 404,但是这样需要两次请求才能返回 404。
我想很多人以前都发现过这个问题,我相信这是一个常见问题,但我还没有找到解决方案。
最佳答案
尝试使用-f
检查。它检查请求是否针对现有文件:
RewriteCond %{REQUEST_FILENAME} -f
RewriteCond %{REQUEST_URI} \.(php)$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://www.example.com/$1/ [L,R=301]
关于.htaccess - 向 URL 添加尾部斜杠时获取 301 而不是 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14064008/