rewrite location in the middle of the path

Maxim Dounin mdounin at mdounin.ru
Fri Nov 30 17:15:16 UTC 2012


Hello!

On Fri, Nov 30, 2012 at 11:06:39AM -0500, nrsk wrote:

> Здравствуйте!
> 
> Столкнулась с задачей: необходимо преобразовать url типа
> /my-context/id/param1,param2,paramN в url типа
> /dev/folder/id_param1,param2,paramN.   Id может быть только числом.
> Попробовала написать rewrite для данного преобразования.
>  location  /my-context/([0-9]+)/(.*)$ {
> rewrite /dev/folder/$1_$2/  permanent;
> }
> Итоговую строку получила в виде /dev/folder/id/param1,... etc.
> В чем может быть проблема с заменой символов "/" на "_" ?

Я вижу как минимум три проблемы:

1. В location написано регулярное выражение, но модификатора "~" 
не стоит.  В результате location будет интерпретироваться как 
обычная строка.

2. В директиве rewrite пропущено регулярное выражение.  Синтаксис 
директивы rewrite выглядит так:

    rewrite regex замена [флаг];

Подробности см. http://nginx.org/r/rewrite/ru.

3. Кроме того, надо учитывать, что $1 и т.п. берутся из последнего 
совпавшего регулярного выражения, т.е. в случае директивы rewrite - 
из регулярного выражения в этом самом rewrite'е.

Правильно как-то так:

location /my-context/ {
    rewrite ^/my-context/([0-9]+)/(.*)$ /dev/folder/$1_$2/ permanent;
}


-- 
Maxim Dounin
http://nginx.com/support.html



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