Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Есть Аналог комбинированн ых RewriteCond Апача?
При переносе сайта с Апача на Nginx (nginx - морда и статика, Апач остался для
динамики на 127.0.0.1:8080) столкнулся с неустранимой проблемой :(
Было
RewriteCond %{QUERY_STRING} ^.*That=cat.*$
RewriteCond %{QUERY_STRING} !^.*Tn=\d.*$
RewriteRule ^.* %{REQUEST_URI}?%{QUERY_STRING}&Tn=6&CL=0
То есть если в строке запроса стоит, например:
/take?That=cat&go=1
то надо было его дополнить до
/take?That=cat&go=1&Tn=6&CL=0
а если
1) /take?That=cat&Tn=3
или
2) /take?Tn=8&That=cat&go=yes
то оставить как есть
Пока придумал только регэксп для случая 1), когда в строке есть That=cat и
может быть или не быть Tn=\d следом
if ($QUERY_STRING ~* ^.*That=cat(?!.*Tn=[0-9]+).*$) {
rewrite . "$URI?$QUERY_STRING&Tn=6&CL=0?" permanent;
}
Регэкспа для случая 2) когда в строке есть That=cat и может быть или не быть
Tn=\d ДО, не нашел.
Пытался, следуя рекомендациям Игоря тут
(http://markmail.org/message/yv6x3z66x3a5jdv2) написать извратный конфиг типа
такого:
location /take {
proxy_pass http://127.0.0.1:8080/take;
if ($QUERY_STRING ~* ^.*That=cat.*$) {
rewrite ^.*$ /check_cat permanent;
}
}
location /check_cat {
set $APPEND1 "&Tn=6&CL=0";
if ($QUERY_STRING ~* ^.*Tn=[0-9]+.*$) {
set $APPEND1 "";
}
rewrite ^.*$ "/take_cat?$QUERY_STRING$APPEND1?" permanent;
}
location /take_cat {
proxy_pass http://localhost:8080/take;
proxy_redirect http://localhost:8080/take /take
}
имеет минусы. Приводит к куче редиректов внутри, судя по логам. и в результате
в строке браузера видно
http://www.site.com/take_cat?That=cat&Tn=6&CL=0
а надо было получить
http://www.site.com/take?That=cat&Tn=6&CL=0
Можно ли вообще сделать такой редирект, как был у меня в Апаче?
И еще может можно было бы сделать регэксп с анализом на Tn=\d и до и после. Но
насколько я знаю проверка типа
^.*(?<*Tn=[0-9]+.*)That=cat(?!.*Tn=[0-9]+).*$
невозможно, так как требует фиксированного числа символов для условия ?<
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,55036,55036#msg-55036
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|