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

Posted

技术标签:

【中文标题】使用 .htaccess 重定向 404 而不重定向尾部斜杠【英文标题】:Redirect 404 with .htaccess without redirecting trailing slash 【发布时间】:2021-05-21 00:39:24 【问题描述】:

我希望我的.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]

【问题讨论】:

重定向和/或发送 404 请求到主页对于 SEO 和可用性来说通常是个坏主意。 为什么你想这样做有什么特别的原因吗?了解您的 URL 结构(以及您如何路由 URL)也有助于更好地解决这个问题。 (但无论如何,2 个重定向不一定是“坏的”。) 【参考方案1】:

改为这样:

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 和可用性。

【讨论】:

以上是关于使用 .htaccess 重定向 404 而不重定向尾部斜杠的主要内容,如果未能解决你的问题,请参考以下文章

wordpress 和 htaccess 301 重定向没有管理员

.htaccess 文件不重定向 http://www。到 https://www

重定向进入空白页面而不重定向到路由 Laravel 5.8

在 Bootstrap 中,如何使用模态重定向到一个部分(而不重定向到打开模态的位置)

如何使用 .htaccess 将错误 404 重定向到主页?

使用 Azure Active Directory 身份验证而不重定向到 Microsoft