.htaccess - 向 URL 添加尾部斜杠时获取 301 而不是 404

标签 .htaccess mod-rewrite http-status-code-404 trailing-slash

我已经为此工作了几个小时,但找不到相关信息。嗯,是的,有信息,但我只能找到单独的解决方案,这些解决方案组合起来不起作用。

我试图从这里开始:

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/

相关文章:

php - 将 .html 处理为 .php (lighttpd)?

apache - .htaccess mod_rewrite 在子目录中不起作用

ruby-on-rails - 如何捕获和重定向有效但资源 ID 无效的 Rails 路线?

php - Drupal 网站给出 404 但页面正在显示

php - 为什么我使用 .htaccess 文件时会收到 500 错误

php - 带有完整路径和查询的 http 到 https [apache]

php - .htaccess 只允许访问 index.php 和一个目录

php - https 旧 url 到同一网站中的新 https url

.htaccess url 使用 ssl 重定向重写

http - 如何使用基于 404 错误的 mod_rewrite 重定向到自定义错误页面