Нужна помощь с modrewrite rule

artalex
На сайте с 08.12.2005
Offline
144
352

Приветствую всех!

Столкнулся с проблемой реализации условия для 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,

чем вводит меня в ступор... Кто может подсказать?

C
На сайте с 04.02.2005
Offline
277
#1

попробуйте убрать крышку

потому что в %{REQUEST_URI} также еще может находится (и находится метод)

RewriteCond %{REQUEST_URI} [A-Z]{3,}\sа здесь уже входящая строка запроса

J
На сайте с 20.02.2014
Offline
120
jkm
#2

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

/verona/cat/subcat -> /cat/subcat?region=verona -> /subcat?region=cat

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


RewriteCond %{QUERY_STRING} !^region=
artalex
На сайте с 08.12.2005
Offline
144
#3

jkm, спасибо большое! Все верно!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий