Re[2]: if нужен.

Михаил Монашёв postmaster at softsearch.ru
Wed Aug 15 16:29:07 UTC 2012


Здравствуйте, 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;

Заработало, спасибо.

А почему set нельзя на уровне http размещать? Странно читается: map на
уровне http, а set, работающий с ними, пихается в несколько server и location.

Он по необходимости не вызывается, как map, а отрабатывает всегда?

-- 
С уважением,
 Михаил                          mailto:postmaster at softsearch.ru



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