RedirectMatch: перенаправляет на неправильный 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/
Когда я захожу на example.com/products/catxy/319, меня перенаправляют на продукт-1, а не на продукт-3
Как я понимаю, приведенное выше регулярное выражение означает начинать с /products/catxy/319[MAYBEMORE] -> перенаправить на product-3
Я не могу написать ^/products/catxy/319$, потому что для 319 есть много разных окончаний (все варианты этого идентификатора продукта).
Я также не знаю, будет ли лучше использовать mod_rewrite в моей ситуации.
1 ответ
Проблема в наличии ?
в конце шаблона: ^/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/
Не забудьте очистить кеш браузера перед проверкой изменений.