使用 .htaccess 重定向 404 而不重定向尾部斜杠

时间:2021-02-18 04:20:40

标签: apache .htaccess redirect mod-rewrite http-status-code-404

我希望我的 .htaccess 文件将所有 404 页面重定向到主页并删除所有页面上的尾部斜杠。但是,带有尾部斜杠的 404 页面会获得 2 次重定向。我该如何解决这个问题?

现在:
www.example.com/notfound/ --> www.example.com/notfound --> www.example.com

我想要的:
www.example.com/notfound/ --> www.example.com

这是我的 .htaccess 文件:

ErrorDocument 404 https://www.example.com

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} (.+)/$
RewriteRule ^(.*)/$ https://www.example.com/$1 [R,L]

1 个答案:

答案 0 :(得分:2)

改为这样做:

ErrorDocument 404 https://www.example.com/

RewriteEngine On

RewriteCond %{DOCUMENT_ROOT}/$1 -f
RewriteRule ^(.*)/$ /$1 [R,L]

当请求没有映射到一个目录时,不是删除尾部斜杠,而是当请求(没有尾部斜杠)映射到一个物理文件时,你真的想删除尾部斜杠。这样可以避免删除已经是 404 的请求的尾部斜杠。

您检查 REQUEST_URI 服务器变量的第二个条件完全是多余的。

移除尾部斜杠的重定向应该是 301(永久),而不是 302(临时)——但这取决于你。

但是,为了强调我上面的评论,除非您有特定的理由这样做,否则重定向到 404 和/或将您的主页作为 404 通常对 SEO 和可用性不利。< /p>

相关问题