重定向.htaccess - 语法 - 没有效果

时间:2017-02-07 22:29:55

标签: .htaccess redirect

情况:在重新命名在线商店上的一堆产品后,需要更改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。

我做错了什么,以及正确的语法是什么?即匹配请求的网址内的特定字符串,在任何位置?

1 个答案:

答案 0 :(得分:0)

您的上一条规则失败,因为它与请求的uri / AA55COMPLETE不匹配,因为正则表达式模式中的尾随。正则表达式中的点表示匹配另一个字符,因此它尝试匹配 / AA55COMPLETEA 。要将 / AA55COMPLETE 重定向到 / AA55COMPLETE100 ,您可以使用

RewriteEngine on

RewriteRule ^AA55COMPLETE/?$ /AA55COMPLETE100 [NC,L,R]