为什么大写字符会在我的编码网址中导致重定向(以及GWT重定向错误)?

时间:2009-12-24 19:34:17

标签: url-rewriting

我看到了具有编码字符的网址的奇怪重定向行为。例如,以下两个URL仅在第一个编码字符中的“e / E”的情况下不同(即“%e2”与“%E2”)。

网址1 http://youlookfab.com/welookfab/topic/your-favourite-80%e2%80%99s-music-bands

  • “200 OK”HTTP状态,页面加载正常

网址2 http://youlookfab.com/welookfab/topic/your-favourite-80%E2%80%99s-music-bands

  • 导致“302 Found”重定向

  • 在浏览器中,页面重定向到上面的正确网址(小写“e”)

  • 使用web-sniffer.net,内容长度为零

我最初开始研究这个问题是因为Google网站管理员工具在一堆有URL编码字符的网页上显示了抓取错误(“重定向错误”,具体而言)。虽然我的站点地图文件以小写形式指定这些字符,但GWT以大写形式显示它们。

我在.htaccess中看不到任何理由将小写的URL编码字符重定向到大写。该网站基于bbPress,我认为bbPress代码中没有任何理由可以解决这个问题。

mod_rewrite可以做一些奇怪的事吗?我知道过去有一个错误处理URL编码字符的错误。

非常感谢您的任何见解。

[这是运行LAMP的集成bbPress / WPMU安装,托管在MediaTemple(dv)服务器上]

1 个答案:

答案 0 :(得分:1)

在深入挖掘之后,我发现重定向实际上发生在bbPress中,它检测到传入URL中的大写十六进制,并将其视为与“正确”永久链接(具有小写十六进制)的差异。

我已经在http://theblogeasy.com/2009/12/26/bbpress-and-encoded-urls-with-uppercase-hex/

更详细地编写了这个,以及一个简单的bbPress插件来解决这个问题。

关于Google抓取错误......我的理论是,当抓取工具(将编码的网址转换为大写十六进制)和bbPress(将其重定向为小写十六进制)进入无限循环时,会导致这种情况。当重复获取相同的URL并且抛出错误时,爬虫可能会检测到这种情况。