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