Welcome! Log In Create A New Profile

Advanced

Re: переменные $1

Maxim Dounin
April 22, 2020 05:04PM
Hello!

On Wed, Apr 22, 2020 at 07:14:05PM +0300, Slawa Olhovchenkov wrote:

> On Wed, Apr 22, 2020 at 06:59:21PM +0300, Maxim Dounin wrote:
>
> > 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;
> > }
> >
> > тоже никто не отменял.
>
> не понимаю возражения.
> я как раз о том, что внури map $1..$N локальные и не портят $1..$N в
> других местах. очевидно же, что вот этот $1 _вне_ map никому не нужен.
> $foo сформировался и никому ничего больше от этого map не требуется.

Тут есть два нюанса:

1. Механизм формирования $1..$N - общий, и если map не трогает
$1..$N - то конструкция выше работать не будет. А делать так,
чтобы $1..$N использовали результат выполнения конкретного
регулярного выражения, а не просто последнего - логично как раз в
рамках rewrite'а, где это конкретное регулярное выражение
очевидно. (Ну то есть в рамках map'а следом тоже встанет вопрос,
когда в правой части будет $bar$1, где $bar - ещё один map с
регулярным выражением. Но это, очевидно, надо будет решать так
же.)

2. Вообще говоря, побочные эффекты от регулярных выражений в map'е
быть должны, те же именованные captures - вполне логично
использовать и много кто использует на практике. Использовать
побочные эффекты в виде $1..$N - с моей точки зрения странно, но
теоретически и это вполне может быть.

> > > > https://trac.nginx.org/nginx/ticket/564
> > > >
> > > > Patches are welcome.
> > >
> > > 6 лет...
> >
> > Да, за 6 лет никто не сподобился даже попытаться прислать патч.
> > Что как бы позволяет предложить, что - не жмёт.
>
> или никто не может разобраться.

Это не "или", это именно что "не жмёт". Затраты на попытаться
разобраться - превышают количество проблем, которые создаёт
текущее поведение.

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list
nginx-ru@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx-ru
Subject Author Posted

переменные $1

Slawa Olhovchenkov April 22, 2020 09:32AM

Re: переменные $1

Maxim Dounin April 22, 2020 10:40AM

Re: переменные $1

Slawa Olhovchenkov April 22, 2020 11:16AM

Re: переменные $1

Maxim Dounin April 22, 2020 12:00PM

Re: переменные $1

Slawa Olhovchenkov April 22, 2020 12:16PM

Re: переменные $1

Илья Шипицин April 22, 2020 01:00PM

Re: переменные $1

Maxim Dounin April 22, 2020 05:04PM

Re: переменные $1

Slawa Olhovchenkov April 22, 2020 05:36PM

Re: переменные $1

ngnx8810773a83 April 22, 2020 07:02PM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 272
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready