0

我正在尝试使用 .htaccess 创建一些 301 重定向,以修复 Google 遇到的一些爬虫错误。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 个,尽管 URL 末尾只有 6 个排列,所以我想我可以使用 RedirectMatch 或 RewriteRule 轻松匹配这 6 个排列中的一个是否存在并重定向到适当的新 URL。我尝试了以下方法:

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]

这些都不起作用。我尝试了许多不同的选项,包括使用 \ 而不是正则表达式字符类转义空格,将正则表达式的开头更改为 ^.*/?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 时匹配,并且该 URI 段可能有 200 个排列,这将使手动输入每个可能的排列成为一项艰巨的任务。

有什么建议么?我想要做的甚至可能吗?

4

1 回答 1

0

您尝试的规则似乎有点复杂,最好有更多示例。

RewriteEngine on
RewriteRule ^.*/773%20CAR%20(.*)$ http://www.example.com/$1 [R=301,L]

应该做的工作。

于 2011-01-27T03:48:37.847 回答