RedirectMatch:重定向到错误 URL

RedirectMatch: redirects to wrong URL

我换了一个 Shop-CMS 并将很多旧的 URL 放入 .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/

当我转到示例时。com/products/catxy/319 我被重定向到 product-1 而不是 product-3

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

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

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

问题在于模式末尾存在 ?^/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/

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