.htaccess 301使用RedirecMatch或RewriteRule重定向

.htaccess 301使用RedirecMatch或RewriteRule重定向,.htaccess,mod-rewrite,redirect,mod-alias,.htaccess,Mod Rewrite,Redirect,Mod Alias,我正在尝试使用.htaccess创建一些301重定向,以修复Google遇到的一些爬虫程序错误。Google正在使用我的一些URL的旧版本,这导致了当爬行器试图访问遗留路径时出现错误。这些遗留URL包含空格,其中有许多空格,都出现在URL字符串中的不同位置。例如,URL可能如下所示: http://www.example.com/car-kits-halogen-aircon-oil/773 CAR 773-halogen-aircon-oil http://www.example.com/7

我正在尝试使用.htaccess创建一些301重定向,以修复Google遇到的一些爬虫程序错误。Google正在使用我的一些URL的旧版本,这导致了当爬行器试图访问遗留路径时出现错误。这些遗留URL包含空格,其中有许多空格,都出现在URL字符串中的不同位置。例如,URL可能如下所示:

http://www.example.com/car-kits-halogen-aircon-oil/773 CAR 773-halogen-aircon-oil
http://www.example.com/773-halogen-aircon-oil
这些URL不必要地长,特别是因为它们最终都显示相同的内容。它们现在被缩短为以下内容:

http://www.example.com/car-kits-halogen-aircon-oil/773 CAR 773-halogen-aircon-oil
http://www.example.com/773-halogen-aircon-oil
虽然URL末尾只有6个排列,但实际上有1000多个,所以我想我可以使用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]
这些都不起作用。我尝试了许多不同的选项,包括使用\而不是regex字符类转义空格、将regex的开头改为^.*/?773以及其他许多方法,但都不起作用

我在上使用了regex测试功能,它报告我的正则表达式是有效的,并根据我期望的URL生成匹配,但是.htaccess没有像我期望的那样重定向

我可以使用普通重定向,如下所示:

Redirect 301 "/car-kits-halogen-aircon-oil/773 CAR 773-halogen-aircon-oil" http://www.example.com/773-halogen-aircon-oil
这是可行的,但也有问题,因为它只在有汽车套件卤素空调油的情况下匹配,而且可能有200个URI段的排列,这将使手动输入每个可能的排列成为一项巨大的任务


有什么建议吗?我想做的是可能的吗?

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

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

应该做这项工作。

看起来您正试图完成以下任务:
RedirectRule^/*-卤素空调油/([0-9]+).$http://www.example.com/$1-卤素-aircon-oil[R=301,L]
这是通用格式吗?问题是第一段大约有200个排列,其中大部分可能与第二部分无关。因此,与第一部分匹配将不起作用,因为它可能是——出于所有目的和目的——任何东西。因此,例如,旧URL可能是“example.com/xxx-yyy-zzz/773 CAR 773卤素空调油”或“example.com/aaa-bbb-ccc/773 CAR 773卤素空调油”,现在两者都应该是“example.com/773卤素空调油”这看起来应该行得通,但实际上不行。该站点上的所有URL现在都采用的形式是,而过去它们采用的形式是。_Y段大约有200个排列,而_Z段只有6个排列。Z段始终是:类似于“773汽车773卤素空调油”或“G2 KPD G2发电机注释列表”。在新系统中,段_X始终是段_Z的6个排列之一,但它需要丢失前两个元素和空白(“773车”或“G2 KPD”等)。有意义吗?总是有“字母+数字+字母”的字符序列吗?您能提供更多URI的示例和您想要的最终形式吗?以下是6个分段排列:“773汽车773卤素空调油”、“G2 KPD G2 gen注释列表”、“892 DIK 892配套灯转换玻璃”、“R6m KPD R6m gen注释列表”、“G3 LKV G3 gen注释列表”、“B4 HID B4配套灯转换玻璃”。如果需要的话,我很高兴有6条匹配规则,但主要的问题是,不管发生什么,我都需要Y段消失,Z段保持完整,只是没有(“字母+数字3字母”)模式。我希望这是有帮助的。与此同时,我编写了一个PHP脚本,为每个爬网错误编写单独的重定向规则,但每天都会出现更多错误。因此example.com/aaa-bbb-ccc/R6m KPD R6m gen note list和example.com/ddd-eee/R6m KPD R6m gen note list都应该重定向到example.com/R6m-gen-note-list。同样,example.com/zzz-yyy-xxxx-www/G3-LKV-G3-gen注释列表和example.com/vvv-uuu-ttt/G3-LKV-G3-gen注释列表应解析为example.com/G3-gen-note-list等。