mod_rewrite编码前向斜线困境

时间:2012-12-05 17:23:26

标签: regex apache mod-rewrite url-rewriting

在创建我们的汽车电子商务商店时,我们在名称(“/”)中命名了一些带有正斜杠/虚线的产品,例如:VOLKSWAGEN GOLF/GTI。电子商务引擎会将此产品的网址重写为GOLF%7B47%7DGTI。我们决定继续将所有产品改为使用世界“AND”而不是正斜线/ virgule。

我们在网上有很多链接,我总是使用mod_rewrite来确保在我们更改产品的命名约定后这些链接仍然有效。但是,这个让我难过!这是我正在尝试做的事情:

OLD URL: http://mystore.com/products/MK4-GOLF%7B47%7DGTI-KONI-STRUTS.html
NEW URL: http://mystore.com/products/MK4-GOLF-AND-GTI-KONI-STRUTS.html

URL的“MK4”部分可以是Mk1,Mk2,Mk3,Mk4,Mk5或Mk6中的任何一个,我们还为每一代Golf / GTI提供各种支柱。因此,我需要编写一个规则,用URL中的GOLF-AND-GTI替换Golf / GTI,并在目标字符串之前或之后继承任何内容。

我当前的(不正确的)RewriteRule看起来像这样:

RewriteRule ^products/(.*)-GOLF%7B47%7DGTI-(.*) http://www.mystore.com/products/$1-GOLF-AND-GTI-$2 [B,R,L]

在过去的几个小时里,我一直把头发拉过来,似乎无法找到合适的工作规则。非常感谢任何帮助!

非常感谢你的时间!

1 个答案:

答案 0 :(得分:1)

%7B47%7D解码为{47}时,您可以按如下方式重写网址:

RewriteRule ^products/(.*)-GOLF\{47\}GTI-(.*) http://www.mystore.com/products/$1-GOLF-AND-GTI-$2 [B,R=301,L]

另外,由于您的目的是使用新URL替换旧URL,因此应使用301重定向而不是默认302.这是从SEO角度处理永久URL更改的recommended way