ПРОЕКТЫ 


  АРХИВ 


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[2]: if нужен.



Здравствуйте, Валентин.

Ещё наткнулся на неочевидные грабли.

Есть конфиг

        # for genereting file name in Content-Disposition header
        map $request_filename $filename {
                default "";
                "~*(?<fn>[^/]+\.(?:gif|jpe?g|png))$"    $fn;
        }

        map $host $sitename {
                hostnames;
                default         "";

                *.site1.ru       "Site1.ru ";
                *.site2.ru       "Site2.ru ";

        }

        map $host $disposition {
                hostnames;
                default "";

                d.*     $foo;
        }

Есть локейшн, в котором потом используются $1 и $2 из его регэкспа:

                location ~* "^/([^/]+)/(.*)" {
                        proxy_pass              http://$1:80/$2;
                }

Если в него вставить строчки

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/1.3.0


-- 
С уважением,
 Михаил                          mailto:postmaster@xxxxxxxxxxxxx

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.