Re: if нужен.

Maxim Dounin mdounin at mdounin.ru
Wed Aug 15 13:15:52 UTC 2012


Hello!

On Wed, Aug 15, 2012 at 03:19:19PM +0400, Михаил Монашёв wrote:

> Здравствуйте, Maxim.
> 
> >> В конфиге есть строчка.
> >> add_header Content-Disposition 'attachment; filename="bla-bla-bla"';
> >> 
> >> Для  одних  хостов  её  надо  выдавать,  а  для других не нужно. Хосты
> >> отличаются только этой строчкой в конфиге. Дабы не разводить копипасту
> >> попробовал  написать add_header внутри if(). Оказалось, что add_header
> >> в  if-е  не  поддерживается. :-( Других способов, кроме if-а я не смог
> >> придумать.
> 
> > Поддерживается.  Другой вопрос, что результат может быть не совсем 
> > такой, как хотелось бы, см. http://wiki.nginx.org/IfIsEvil.
> 
> > Но правильно, IMHO, как-то так:
> 
> > map $host $disposition {
> >     default      "";
> >     example.org  'attachment; filename="bla-bla-bla"';
> > }
> 
> А как сюда ---------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> подставить переменную?
> 
> Написал вот так:
> 
>         map $http_host $disposition {
>                 hostnames;
>                 default "";
> 
>                 d.*     'attachment; filename="$sitename$filename"';
>         }
> 
> В результате в заголовке выдалась строка
> Content-Disposition: attachment; filename="$sitename$filename"
> 
> а значения переменных не подставились. Через set надо это делать?

Сейчас в правой части map поддерживается только одна переменная, 
заменяющая весь результат.  Можно сделать как-то так:

map $host $disposition {
    default      "";
    example.org  $foo;
}

set $foo 'attachment; filename="$sitename$filename"';
add_header Content-Disposition $disposition;

Maxim Dounin



Подробная информация о списке рассылки nginx-ru