Назад | Перейти на главную страницу

Проблема с несколькими правилами перезаписи в htaccess

У меня есть критерии ниже

Если строка запроса соответствует Microwave_Ovens текст мне нужно заменить на Microwave-Ovens (замените подчеркивание дефисом) в URI запроса.

Он работает, как ожидалось, для первого набора из 3 строк, упомянутых ниже. Мне действительно нужно сделать то же самое для другого типа (предположим, Vacuum_Cleaners) тоже то же самое. Я добавил второй набор из 3 строк, но он не работает. Все, что я укажу первым, работает только.

Мои условия и правила перезаписи следующие:

RewriteCond %{QUERY_STRING} ^(.*)Microwave_Ovens(.*)$
RewriteRule ^([^_]*)_+([^_]*)$ /Mr10q/$1-$2?%1Microwave-Ovens%2 [R=301,L]
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [N,DPI]

RewriteCond %{QUERY_STRING} ^(.*)Vacuum_Cleaners(.*)$
RewriteRule ^([^_]*)_+([^_]*)$ /Mr10q/$1-$2?%1Vacuum-Cleaners%2 [R=301,L]
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [N,DPI]

Может ли кто-нибудь предложить мне, что я здесь делаю не так?

RewriteCond %{QUERY_STRING} ^(.*)Microwave_Ovens(.*)$
RewriteRule ^([^_]*)_+([^_]*)$ /Mr10q/$1-$2?%1Microwave-Ovens%2 [R=301,L]
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [N,DPI]

Кажется, что ваши правила намного больше, чем вы заявили в вопросе? Но главная проблема здесь, казалось бы, вторая. RewriteRule директива. Предыдущие RewriteCond директива (и) применяется только к первому RewriteRule директива. Итак, второй RewriteRule будет выполняться безоговорочно и перехватить любой запрос, который может содержать Vacuum_Cleaners.

Поскольку вы продублировали эту директиву во втором блоке правил, возможно, будет достаточно просто удалить первую. Например:

# 1
RewriteCond %{QUERY_STRING} ^(.*)Microwave_Ovens(.*)$
RewriteRule ^([^_]*)_+([^_]*)$ /Mr10q/$1-$2?%1Microwave-Ovens%2 [R=301,L]

# 2
RewriteCond %{QUERY_STRING} ^(.*)Vacuum_Cleaners(.*)$
RewriteRule ^([^_]*)_+([^_]*)$ /Mr10q/$1-$2?%1Vacuum-Cleaners%2 [R=301,L]

# 3
RewriteRule ^([^_]*)_+(.*)$ $1-$2 [N,DPI]