文件名重复不需要但来自 Apache 2.2 .htaccess RedirectPermanent

文件名重复不需要但来自 Apache 2.2 .htaccess RedirectPermanent

在 Apache httpd 2.2 上,当我将 RedirectPermanent 重定向到子目录中的文件时,我的 .htaccess 会失败,但如果目标文件位于网站的根级别或协议和域中,则一切正常。当目标文件位于子目录中时,生成的 URL 会无空格地重复文件名多次,之后主机会报告 403 错误。在一个案例中,浏览器显示“Firefox 检测到服务器正在以永远无法完成的方式重定向对此地址的请求。”;当我在 Firefox 中单击“重试”时,我收到 403 错误。

我已经尝试包括协议和域(http://cold32.com) 位于目标中,但这没有帮助。我没有使用 RedirectMatch 和正则表达式,因为这会增加维护成本,如果必须的话我会使用,但我更喜欢 RedirectPermanent。

失败示例:

在 .htaccess 中:要么从子目录中的文件,要么从没有列出要重定向的文件的子目录中(例如,如果用户通过面包屑追溯):

RedirectPermanent /1/overview/1/the-once-over/2/head-neck-and-trunk-are-tops.htm /1/overview/1/the-once-over/1/head-neck-and-trunk-are-tops.htm

RedirectPermanent /1/overview/1/the-once-over/1/ /1/overview/1/the-once-over/1/head-neck-and-trunk-are-tops.htm

两种情况下浏览器地址栏中的结果为:http://cold32.com/1/overview/1/the-once-over/1/head-neck-and-trunk-are-tops.htmhead-neck-and-trunk-are-tops.htmhead-neck-and-trunk-are-tops.htmhead-neck-and-trunk-are-tops.htmhead-neck-and-trunk-are-tops.htmhead-neck-and-trunk-are-tops.htmhead-neck-and-trunk-are-tops.htmhead-neck-and-trunk-are-tops.htm

答案1

是的,您需要使用 RedirectMatch。您需要将第二条规则更改为:

RedirectMatch permanent /1/overview/1/the-once-over/1/$ /1/overview/1/the-once-over/1/head-neck-and-trunk-are-tops.htm

RedirectPermanent最初写的是将 url 的前缀与第一个字符串匹配,并将其替换为第二个字符串,因此每次它都会head-neck-and-trunk-are-tops.htm在任何实例的末尾添加另一个/1/overview/1/the-once-over/1/,然后当重定向通过时该规则会再次触发,从而完成所有添加。

使用 RedirectMatch,您可以使用 指定字符串的结尾$,因此/1/overview/1/the-once-over/1/$将匹配/1/overview/1/the-once-over/1/,但不会匹配/1/overview/1/the-once-over/1/head-neck-and-trunk-are-tops.htm

另外:这如何导致维护费用增加?

相关内容