rewrite q

Igor Sysoev is at rambler-co.ru
Wed Sep 28 17:53:23 MSD 2005


On Wed, 28 Sep 2005, Dmitry Kondratyev wrote:

> Igor Sysoev wrote:
>
>>> Подскажите где я туплю. :-)
>>> rewrite   ^/dir/page.php\?param=(.+)$   http://$1.site.ru/   permanent;
>>> 
>>> Почему-то не работает.
>> 
>> 
>> rewrite проверят только URI без агрументов. В данном случае можно
>> сделать так:
>> 
>>    location = /dir/page.php {
>>        if ( $query_string ~ "^param=(.+)$" ) {
>>            set  $redirect  $1;
>>            rewrite  ^   http://$redirect.site.ru/?  permanent;
>>        }
>>    }
>
> Спасибо, помогло. Только не понял зачем вопрос в конце 
> http://$redirect.site.ru/
> Вроде и без него всё работает. Теперь другая проблема:
>
> location /dir/page.php {
> 	if ($query_string ~ "^param1=(.+)&param2=value2$" ) {
> 	  set  $redirect  $1;
> 	  rewrite  ^   http://site/page.php?param=$redirect  permanent;
> 	}
> }
>
> Проблема состоит в том, что итоговый урл получается
> http://site/page.php?param=$value1?param1=value1&param2=value2 вместо
> http://site/page.php?param=$value1

Должно быть не

http://site/page.php?param=$value1___?___param1=value1&param2=value2
http://site/page.php?param=$value1___&___param1=value1&param2=value2

Так ?

Вот для этого и нужен "?" в конце:
http://sysoev.ru/nginx/docs/http/ngx_http_rewrite_module.html#rewrite

------------
Если в строке замены указаны аргументы, то предыдущие аргументы запроса
добавляются после них. Можно отказаться от этого добавления, указав в
конце строки замены знак вопроса:

     rewrite  ^/users/(.*)$  /show?user=$1?  last;
------------



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





More information about the nginx-ru mailing list