2017-08-04 111 views
1

我切换了一个Shop-CMS并将大量旧URL放入.htaccess中以将旧产品重定向到其新位置。RedirectMatch:重定向到错误的URL

但一些重定向是错误的:

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我重定向到产品-1,而不是产品3

据我了解上面的正则表达式意味着以/ products/catxy/319开头[MAYBEMORE] - >重定向到产品-3

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

我不知道如果在我的情况下使用mod_rewrite会更好。

回答

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/ 

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

+0

没有,没有工作......但与你回答我改变它^^products/catxy/319(。*)$这是在我的情况下工作 – suntrop

+0

现在检查它应该工作。 '313'后你的网址可能有更多的文字 – anubhava