ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Есть Аналог комбинирова нных RewriteCond Апача?



On Tue, Feb 16, 2010 at 08:37:07AM -0500, anyhow2 wrote:

> При переносе сайта с Апача на 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]+).*$ 
> невозможно, так как требует фиксированного числа символов для условия ?<

Что меня всегда поражало в таких rewrite'ах, так это то, почему люди
выносят такую логику на птичий язык rewrite'ов. Что мешает сделать это
на бэкенде, где есть универсальный язык программирования, а не
кастрированная машина Тьюринга ?


-- 
Игорь Сысоев
http://sysoev.ru

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.