Нужна помощь: nginx + mod_rewrite

CN
На сайте с 29.09.2007
Offline
155
401

Есть один сайт с минисайтами. На этом сервере стоит nginx и правила mod_rewrite:

RewriteCond %{HTTP_HOST} ^(.*)\.domen\.ua [NC]

RewriteRule ^(.*) http://domen.ua/mini/%1/$1 [P,L]

RewriteRule ^mini/(.*)/pages/([0-9]*)/$ /mini-site.php?site_name=$1&page_id=$2

RewriteRule ^mini/(.*)/$ /mini-site.php?site_name=$1 [L]

Суть такова. При наборе test.domen.ua/pages/1/ берем данные из domen.ua/mini-site.php?site_name=test&page_id=1

Но nginx почемуто уходит в рекурсию и возвращает:

2010/03/19 12:30:15 [info] 28488#0: *2101854 client sent too long URI while reading client request line, client: 62.149.23.35, server: domen.ua, request:

"GET /mini/test.domen.ua,%20test.domen.ua,%20test.domen.ua,%20test.domen.ua,%20test.domen.ua,%20test.domen.ua,%20test.domen.ua,%20test.domen.ua, ..."

Т.е. вместо "test" возвращает кучу "test.domen.ua"

T.R.O.N
На сайте с 18.05.2004
Offline
314
#1
conturov.net:
RewriteCond %{HTTP_HOST} ^(.*)\.domen\.ua [NC]
RewriteRule ^(.*) http://domen.ua/mini/%1/$1 [P,L]

это - же бесконечный цикл, если я ничего не путаю

Вам нужно, чтобы при domen.ua/mini/ правило уже не работало...

небоИтесь, ща прибегут помогут. здесь много любителей (к коим я не отношусь) модреврайта =)))

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
CN
На сайте с 29.09.2007
Offline
155
#2
T.R.O.N:
это - же бесконечный цикл, если я ничего не путаю
Вам нужно, чтобы при domen.ua/mini/ правило уже не работало...
небоИтесь, ща прибегут помогут. здесь много любителей (к коим я не отношусь) модреврайта =)))

он должен работать, только в правило передается рекурсия с кучей имени домена, а должно только сам поддомен как указано в правиле.

На сервере без nginx работает, а с nginx и указанием во втором правили что нужно проксировать [P] не хочет. Если ставить [R=301] то работает но мне так не нужно.

conturov.net добавил 24.03.2010 в 18:15

Сделал вот так:

RewriteCond %{HTTP_HOST} ^(www.)?(.*)\.domen\.ua$

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^(.*) ./mini-site.php?site_name=%2&path=$1 [L,QSA]

Путь пришлось ручками обрабатывать, а не mod_rewrite :(

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