Regex mod_重写编码的正斜杠灾难

Regex mod_重写编码的正斜杠灾难,regex,apache,mod-rewrite,url-rewriting,Regex,Apache,Mod Rewrite,Url Rewriting,在创建我们的汽车电子商务商店时,我们以(“/”)的名称命名了一些带有前斜杠/处女座的产品,例如:大众高尔夫/GTI。电子商务引擎将此产品的URL重写为GOLF%7B47%7DGTI。我们决定继续,改写我们所有的产品,以使用“和”,而不是正斜杠/virgule 我们在网络上有很多链接,我总是使用mod_rewrite来确保这些链接在我们更改产品命名约定后仍然有效。然而,这件事让我很难堪!以下是我想做的: OLD URL: http://mystore.com/products/MK4-GOLF%7

在创建我们的汽车电子商务商店时,我们以(“/”)的名称命名了一些带有前斜杠/处女座的产品,例如:
大众高尔夫/GTI
。电子商务引擎将此产品的URL重写为
GOLF%7B47%7DGTI
。我们决定继续,改写我们所有的产品,以使用“和”,而不是正斜杠/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提供各种struts。因此,我需要编写一个规则,在URL中用Golf-AND-GTI替换Golf/GTI,并在目标字符串之前或之后进行任何操作

我当前的(不正确的)重写规则如下所示:

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

在过去的几个小时里,我一直在为这件事发牢骚,但似乎无法制定一个有效的规则。任何帮助都将不胜感激


非常感谢您抽出时间

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

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更改的最佳方法。

非常感谢!结果很好+选择正确答案@Ketola旁注:由于URL的其余部分包含未编码的“-”字符(例如products/MK1-GOLF-AND-GTI-KONI-STRUTS.html),我使用了“NE”标志而不是“B”作为重写规则。在这种情况下,使用NE而不是B应该是安全的,但您也可以完全忽略它,让Apache根据需要转义字符。另外,由于您的目的可能是要删除旧的URL,所以应该使用R=301进行永久重定向。从搜索引擎优化的角度来看,这是最佳的。非常感谢您的输入@Ketola,我已经修改了我的重定向以使用HTTP 301。我不知道这对搜索引擎优化是有益的,但这确实很有意义!再次感谢你的建议!嗨,约翰,不需要用“已解决”来标记你的问题:事实上你接受了下面的答案,对于未来的访问者来说,这清楚地表明它解决了你的问题。干杯