RedirectMatch:重定向到错误的URL

时间:2017-08-04 08:33:28

标签: regex .htaccess redirect mod-rewrite mod-alias

我切换了Shop-CMS,并将大量旧网址放入.htaccess中,将旧产品重定向到新位置。

但有些重定向是错误的:

RedirectMatch 301 ^/products/catxy/313? https://www.example.com/products/catxy/product-1/
RedirectMatch 301 ^/products/catxy/314? https://www.example.com/products/catxy/product-2/
RedirectMatch 301 ^/products/catxy/319? https://www.example.com/products/catxy/product-3/

当我访问example.com/products/catxy/319时,我被重定向到product-1而不是product-3

据我所知,上面的正则表达式意味着从/ products / catxy / 319 [MAYBEMORE]开始 - >重定向到product-3

我不能写^ / products / catxy / 319 $因为319有很多不同的结局(该产品ID的所有变体)。

我不知道在我的情况下使用mod_rewrite是否更好。

1 个答案:

答案 0 :(得分:0)

问题是在模式的末尾存在?^/products/catxy/313?,这使得最后一个数字可选,因此您的第一个规则匹配以下所有开头的任何内容:

/products/catxy/313

products/catxy/31

你可能意味着保持尾随斜杠是可选的,你的规则如下:

RedirectMatch 301 ^/products/catxy/313(?:/.*)?$ https://www.example.com/products/catxy/product-1/
RedirectMatch 301 ^/products/catxy/314(?:/.*)?$ https://www.example.com/products/catxy/product-2/
RedirectMatch 301 ^/products/catxy/319(?:/.*)?$ https://www.example.com/products/catxy/product-3/

请记住在测试更改之前清除浏览器缓存。