我们有一个带有动态 URL 方案的 PHP 应用程序,它需要对字符进行百分比编码,甚至是“非保留字符”,例如实际上不需要编码的括号或撇号。应用程序认为以“错误”方式编码的 URL 被规范化,然后重定向到“正确”编码。
但是谷歌和其他用户代理将以不同的方式规范百分比编码/解码,这意味着当 Googlebot 请求页面时,它会要求“错误”的 URL,当它返回到“正确”URL 的重定向时,Googlebot 将拒绝跟随重定向并将拒绝索引该页面。
是的,这是我们这边的一个错误。HTTP 规范要求服务器同等对待百分比编码和非百分比编码的未保留字符。但是现在解决应用程序代码中的问题并不简单,所以我希望通过使用 Apache 重写规则来避免代码更改,这将确保从应用程序的角度“正确”编码 URL , 这意味着撇号、括号等都是百分比编码的,并且空格被编码为+
而不是%20
。
这是一个例子,我想重写第一种形式并最终得到第二种形式:
- www.splunkbase.com/apps/All/4.x/Add-On/app:OPSEC+LEA+for+Check+Point+(Linux)
- www.splunkbase.com/apps/All/4.x/Add-On/app:OPSEC+LEA+for+Check+Point+%28Linux%29
这是另一个:
- www.splunkbase.com/apps/All/4.x/app:Benford's+Law+Fraud+Detection+Add-on
- www.splunkbase.com/apps/All/4.x/app:Benford%27s+Law+Fraud+Detection+Add-on
这是另一个:
- www.splunkbase.com/apps/All/4.x/app:Benford%27s%20Law%20Fraud%20Detection%20Add-on
- www.splunkbase.com/apps/All/4.x/app:Benford%27s+Law+Fraud+Detection+Add-on
如果应用只看到这些 URL 的第二种形式,则它不会发送任何重定向,Google 将能够为该页面编制索引。
我是一个有重写规则的新手,从我对mod-rewrite 文档的阅读中很明显,mod_rewrite 做了一些自动编码/解码,这可能有助于或伤害我想做的事情,尽管不确定。
关于重写规则以处理上述情况的任何建议?我可以为每个特殊字符设置一个规则,因为它们并不多,但是一个规则(如果可能的话)将是理想的。