А если так попробовать:<div><br></div><div><div> location /take {</div><div> proxy_pass <a href="http://127.0.0.1:8080/take" target="_blank">http://127.0.0.1:8080/take</a>;</div><div><br></div><div> if ($arg_that != "cat") {</div>
<div> break;</div><div> }</div><div><br></div><div> if ($arg_tn !~ \d) {</div><div> rewrite ^.*$ "/take?Tn=6&CL=0" permanent;</div><div> }</div><div> }</div><div>
<br></div><br><div class="gmail_quote">16 февраля 2010 г. 16:37 пользователь anyhow2 <span dir="ltr"><<a href="mailto:nginx-forum@nginx.us">nginx-forum@nginx.us</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
При переносе сайта с Апача на Nginx (nginx - морда и статика, Апач остался для динамики на <a href="http://127.0.0.1:8080" target="_blank">127.0.0.1:8080</a>) столкнулся с неустранимой проблемой :(<br>
Было<br>
RewriteCond %{QUERY_STRING} ^.*That=cat.*$<br>
RewriteCond %{QUERY_STRING} !^.*Tn=\d.*$<br>
RewriteRule ^.* %{REQUEST_URI}?%{QUERY_STRING}&Tn=6&CL=0<br>
<br>
То есть если в строке запроса стоит, например:<br>
/take?That=cat&go=1<br>
то надо было его дополнить до<br>
/take?That=cat&go=1&Tn=6&CL=0<br>
<br>
а если<br>
1) /take?That=cat&Tn=3<br>
или<br>
2) /take?Tn=8&That=cat&go=yes<br>
<br>
то оставить как есть<br>
<br>
Пока придумал только регэксп для случая 1), когда в строке есть That=cat и может быть или не быть Tn=\d следом<br>
if ($QUERY_STRING ~* ^.*That=cat(?!.*Tn=[0-9]+).*$) {<br>
rewrite . "$URI?$QUERY_STRING&Tn=6&CL=0?" permanent;<br>
}<br>
Регэкспа для случая 2) когда в строке есть That=cat и может быть или не быть Tn=\d ДО, не нашел.<br>
<br>
Пытался, следуя рекомендациям Игоря тут (<a href="http://markmail.org/message/yv6x3z66x3a5jdv2" target="_blank">http://markmail.org/message/yv6x3z66x3a5jdv2</a>) написать извратный конфиг типа такого:<br>
location /take {<br>
proxy_pass <a href="http://127.0.0.1:8080/take" target="_blank">http://127.0.0.1:8080/take</a>;<br>
if ($QUERY_STRING ~* ^.*That=cat.*$) {<br>
rewrite ^.*$ /check_cat permanent;<br>
}<br>
}<br>
location /check_cat {<br>
set $APPEND1 "&Tn=6&CL=0";<br>
if ($QUERY_STRING ~* ^.*Tn=[0-9]+.*$) {<br>
set $APPEND1 "";<br>
}<br>
rewrite ^.*$ "/take_cat?$QUERY_STRING$APPEND1?" permanent;<br>
}<br>
location /take_cat {<br>
proxy_pass <a href="http://localhost:8080/take" target="_blank">http://localhost:8080/take</a>;<br>
proxy_redirect <a href="http://localhost:8080/take" target="_blank">http://localhost:8080/take</a> /take<br>
}<br>
имеет минусы. Приводит к куче редиректов внутри, судя по логам. и в результате в строке браузера видно<br>
<br>
<a href="http://www.site.com/take_cat?That=cat&Tn=6&CL=0" target="_blank">http://www.site.com/take_cat?That=cat&Tn=6&CL=0</a><br>
<br>
а надо было получить<br>
<br>
<a href="http://www.site.com/take?That=cat&Tn=6&CL=0" target="_blank">http://www.site.com/take?That=cat&Tn=6&CL=0</a><br>
<br>
Можно ли вообще сделать такой редирект, как был у меня в Апаче?<br>
<br>
И еще может можно было бы сделать регэксп с анализом на Tn=\d и до и после. Но насколько я знаю проверка типа<br>
^.*(?<*Tn=[0-9]+.*)That=cat(?!.*Tn=[0-9]+).*$<br>
невозможно, так как требует фиксированного числа символов для условия ?<<br>
<br>
Posted at Nginx Forum: <a href="http://forum.nginx.org/read.php?21,55036,55036#msg-55036" target="_blank">http://forum.nginx.org/read.php?21,55036,55036#msg-55036</a><br>
<br>
<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org">nginx-ru@nginx.org</a><br>
<a href="http://nginx.org/mailman/listinfo/nginx-ru" target="_blank">http://nginx.org/mailman/listinfo/nginx-ru</a><br>
</blockquote></div><br></div>