Re: переменные $1
Maxim Dounin
mdounin на mdounin.ru
Ср Апр 22 15:59:21 UTC 2020
Hello!
On Wed, Apr 22, 2020 at 06:15:07PM +0300, Slawa Olhovchenkov wrote:
> On Wed, Apr 22, 2020 at 05:39:23PM +0300, Maxim Dounin wrote:
>
> > Hello!
> >
> > On Wed, Apr 22, 2020 at 04:31:02PM +0300, Slawa Olhovchenkov wrote:
> >
> > > А это нормально что переменные $1..$N не являются локальными для
> > > регэкспа?
> > >
> > > Т.е. если например у нас есть rewrite и там что-то захватывается, а в
> > > результате используется еще и результат map с регэкспом, то $1 будет
> > > браться из map.
> > > Что-то мне кажется это не логично.
> >
> > Это следствие того, что regexp и использование $1..$N могут быть
> > разнесены, например, в конструкциях вида (цитата из
> > http://nginx.org/r/if):
> >
> > if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
> > set $id $1;
> > }
> >
> > Для rewrite'а это, конечно, не нормально, надо править. Про это
> > даже есть тикет:
>
> не для rewrite, а для map.
> вроде как логично ожидать, что map срабатывает выдавая указанную
> переменную без каких-либо дополнительных побочных эффектов.
Ну да, одно из возможных решений - отучить регулярные выражения в
map'е трогать $1..$N. С другой стороны - конфигурации вида
map $uri $foo {
~(.+) $1;
}
тоже никто не отменял.
> > https://trac.nginx.org/nginx/ticket/564
> >
> > Patches are welcome.
>
> 6 лет...
Да, за 6 лет никто не сподобился даже попытаться прислать патч.
Что как бы позволяет предложить, что - не жмёт.
--
Maxim Dounin
http://mdounin.ru/
Подробная информация о списке рассылки nginx-ru