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/

Не забудьте очистить кеш браузера перед проверкой изменений.

Другие вопросы по тегам