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

Ilya Pirogov iam.stalk на gmail.com
Вт Фев 16 18:25:28 MSK 2010


А если так попробовать:

    location /take {
        proxy_pass http://127.0.0.1:8080/take;

        if ($arg_that != "cat") {
            break;
        }

        if ($arg_tn !~ \d) {
            rewrite ^.*$ "/take?Tn=6&CL=0" permanent;
        }
    }


16 февраля 2010 г. 16:37 пользователь anyhow2 <nginx-forum at nginx.us>написал:

> При переносе сайта с Апача на 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 at nginx.org
> http://nginx.org/mailman/listinfo/nginx-ru
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://nginx.org/pipermail/nginx-ru/attachments/20100216/26fb690d/attachment-0001.html>


Подробная информация о списке рассылки nginx-ru