ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: rewrite location in the middle of the path



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 mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.