Как прописать с modrewrite rule?

Столкнулся с проблемой реализации условия для modrewrite.
Задача: Если первый элемент адреса URL является названием города из списка городов, перенаправить запрос типа:
/city_name/category/subcategory/...etc

на
/category/subcategory/...etc/?city=city_name


Это хорошо работает, если написать такой код в .htaccess

RewriteCond %{REQUEST_URI} ^/(bucuresti|verona|sofia)/
RewriteRule ^([a-z0-9-]+)/(.+)$ /$2?region=$1 [R,L]


Однако, список городов довольно громоздкий (более 3 тыс.), поэтому я решил пойти другим путем...
Я хочу перенаправлять ВСЕ запросы, за исключением тех, что не являются городами (список таковых значительно короче)... поэтому я попытался написать так:

RewriteCond %{REQUEST_URI} !^/(help|contacts|about)/
RewriteRule ^([a-z0-9-]+)/(.+)$ /$2?region=$1 [R,L]


(что по моему мнению, должно было работать так же, ибо все, что я поменял - поставил НЕ (знак !) перед списком)...
Но работать "как надо" не хочет :(

Почему-то "видит" только два последних параметра, например /verona/cat/subcat редиректит на /subcat?region=cat, чем вводит меня в ступор... Кто может подсказать?
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
atillus
@atillus Автор вопроса
Разобрался... Точнее, подсказали :)

После редиректа новый адрес начинается на /cat/ и снова подходит под условие !^/(help|contacts|about)/
/verona/cat/subcat -> /cat/subcat?region=verona -> /subcat?region=cat

Можно дополнительно проверять %{QUERY_STRING} на наличие region.

RewriteCond %{QUERY_STRING} !region=
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы