Welcome! Log In Create A New Profile

Advanced

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

Igor Sysoev
February 16, 2010 10:32AM
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@nginx.org
http://nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

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

anyhow2 February 16, 2010 08:37AM

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

Ilya Pirogov February 16, 2010 10:26AM

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

anyhow2 February 18, 2010 04:37AM

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

anyhow2 February 18, 2010 05:12AM

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

Igor Sysoev February 16, 2010 10:32AM

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

Kruglov Eugenie February 17, 2010 01:44AM

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

Igor Sysoev February 17, 2010 03:42AM

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

Peter Leonov February 17, 2010 04:26AM

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

Igor Sysoev February 17, 2010 04:36AM

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

anyhow2 February 18, 2010 05:38AM

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

Михаил Монашёв February 17, 2010 04:30AM

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

anyhow2 February 18, 2010 05:24AM

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

anyhow2 February 25, 2010 04:51AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 315
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready