我正在尝试使用.htaccess创建大约301个重定向,以修复谷歌遇到的一些爬虫错误。Google正在使用我的一些URL的旧版本,当爬行器试图访问遗留路径时,这会导致出现错误。这些传统URL包含空格,并且有许多空格,它们都出现在URL字符串中的不同位置。例如,URL可能如下所示:
http://www.example.com/car-kits-halogen-aircon-oil/773 CAR 773-halogen-aircon-oil这些URL是不必要的长,特别是因为它们最终都显示相同的内容。它们现在被缩写为如下所示:
http://www.example.com/773-halogen-aircon-oil实际上有超过1,000个,尽管只有6个网址结尾的排列,所以我想我可以使用RedirectMatch或RewriteRule来轻松地匹配这6个排列中的一个是否存在,并重定向到适当的新网址。我尝试过以下几种方法:
RedirectMatch .*/773[\s]?(%20)?CAR[\s]?(%20)?773-halogen-aircon-oil$ http://www.example.com/773-halogen-aircon-oil以及:
RewriteEngine On
RewriteBase /
RewriteRule .*/773[\s]?(%20)?CAR[\s]?(%20)?773-halogen-aircon-oil$ http://www.example.com/773-halogen-aircon-oil [R=301,L]这些都不起作用。我尝试了许多不同的方法,包括使用\而不是regex字符类来转义空格,将regex的开头更改为^.*/?773以及许多其他方法,但都不起作用。
我在http://www.regular-expressions.info/javascriptexample.html中使用了正则表达式测试特性,它报告我的正则表达式是有效的,并根据我期望的URL生成一个匹配,但是.htaccess没有像我期望的那样重定向。
我可以使用一个普通的重定向,如下所示:
Redirect 301 "/car-kits-halogen-aircon-oil/773 CAR 773-halogen-aircon-oil" http://www.example.com/773-halogen-aircon-oil这是可行的,但它是有问题的,因为它只在car-kits-halogen-aircon-oil存在的情况下才匹配,并且可能有200个URI段的排列,这将使手动输入每个可能的排列成为一项巨大的任务。
有什么建议吗?我想要做的事情有可能实现吗?
发布于 2011-01-27 11:48:38
你正在尝试的规则似乎有点复杂,最好是有更多的例子。
RewriteEngine on
RewriteRule ^.*/773%20CAR%20(.*)$ http://www.example.com/$1 [R=301,L]应该能胜任这项工作。
https://stackoverflow.com/questions/4812354
复制相似问题