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