情况:在重新命名在线商店上的一堆产品后,需要更改URL以匹配新名称。设置重定向以处理旧的和新的URL转换。
由于旧URL可以在多个不同的地方包含这些模型名称,因此采用了“关键字”方法。换句话说,“如果 THIS_STRING 出现在请求的网址中的某个位置,无论路径如何,都会重定向到此新网址。”
某些重定向有效,因为旧模型名称和新模型名称不同:
RewriteRule ^.*(CC88SPECIAL).*$ http://www.example.com/widgets-DD99EXTREME [L,NC,R=301]
这会将包含“CC88SPECIAL”的任何请求正确地重定向到新网址。
问题是,相同的语法无法应用于新名称包含旧名称的模型,即AA55COMPLETE成为AA55COMPLETE100:
RewriteRule ^.*(AA55COMPLETE).*$ http://www.example.com/widgets-AA55COMPLETE100 [L,NC,R=301]
“关键字”后面的星号会产生一个循环。
所以格式改为:
RewriteRule ^.*(AA55COMPLETE).$ http://www.example.com/widgets-AA55COMPLETE100 [L,NC,R=301]
问题是,这没有效果。没有循环,没有错误,没有503,根本就没有改变URL。
我做错了什么,以及正确的语法是什么?即匹配请求的网址内的特定字符串,在任何位置?
答案 0 :(得分:0)
您的上一条规则失败,因为它与请求的uri / AA55COMPLETE不匹配,因为正则表达式模式中的尾随。。正则表达式中的点表示匹配另一个字符,因此它尝试匹配 / AA55COMPLETEA 。要将 / AA55COMPLETE 重定向到 / AA55COMPLETE100 ,您可以使用
RewriteEngine on
RewriteRule ^AA55COMPLETE/?$ /AA55COMPLETE100 [NC,L,R]