Re: if нужен.
Валентин Бартенев
ne at vbart.ru
Wed Aug 15 19:14:21 UTC 2012
On Wednesday 15 August 2012 23:01:14 Михаил Монашёв wrote:
[...]
> Если в него вставить строчки
>
> set $foo 'attachment; filename="$sitename$filename"';
> add_header Content-Disposition $disposition;
>
> , то в $1 и $2 заносится мусор из map-ов, которые используются для
> расчёта переменных $foo, $sitename и $filename . Причём не важно, выше
> или ниже proxy_pass написать эти строчки. Это как бы совсем не
> очевидно и при большом конфиге можно долго искать причины такого
> поведения.
>
> По хорошему у $1 и $2 могла бы быть область видимости, хотя их
> глобальность тоже чем-то полезна. Не могу придумать, как было бы
> правильно, но сейчас как-то не очень правильно. В том же перле, если
> $1 используется в одной функции, то мне не надо думать, что она затрёт
> $1 в вызвавшей функции или сама затрётся функцией, которую вызывает.
>
> Городить именованные переменные в регэкспах конечно можно, но всё это
> костыли какие-то и они не помогают, ибо $1 всёравно почему-то
> портится.
>
В nginx в принципе нет такого понятия как "область видимости", и принцип
конфигурации в основном декларативный. Не надо сравнивать его с языком
программирования, более того, не надо пытаться программировать на нем.
С позиционными выделениями все просто: они относятся к последнему обработанному
регулярному выражению, и должны быть использованы только в самых очевидных
случаях, типа rewrite ~(reg)(exp) $1$2; и т.п.
Во всех остальных, где отношение установить не представляется возможным, следует
пользоваться именованными выделениями.
--
Валентин Бартенев
Подробная информация о списке рассылки nginx-ru