On Mon, 9 Oct 2006, Igor Sysoev wrote:
IS> > а в charset переменные не поддерживаются?
IS> >
IS> > map $host $charset {
IS> > hostnames;
IS> > default windows-1251;
IS> > include charsetmap.conf;
IS> > }
IS> >
IS> > server {
IS> > include listen.conf;
IS> > server_name _ * ;
IS> > charset $charset;
IS> > ....
IS> > }
IS> >
IS> > так нельзя? а хочется...
IS>
IS> Патч. Единственный момент - charset'ы нужно описать или стандартными
IS> charset_map'ами:
IS>
IS> include conf/koi-win;
IS>
IS> или вот такими пустыми:
IS>
IS> charset_map iso-8859-5 _ { }
М-м, торможу что-то ;)
Как при этом должен выглядеть charsetmap.conf ?
.domain.tld include conf/koi-win;
А где ж здесь кодировка?
Потому что перекодировка меня интересует крайне слабо, главное - чарсет в
заголовке Content-type: (для хостинга, большая часть которого в windows-1251,
но встречаются koi-8r и utf-8)
Тогда, если перекодировка вообще не используется, то так:
charset_map windows-1251 _ {}
charset_map utf-8 _ {}
charset_map koi8-r _ {}
map $host $charset {
....
.domain.tld windows-1251;
....
}
Смысл всего действия в том, что nginx изначально внутри себя во время
запроса не оперировал строковыми именами charset'ов: каждому charset'у
на стадии обработки конфига присваивается численный индекс и дальше
работа идёт в основном с ними. В данном случае во время запроса
приходится иметь дело со строками, но для тоже ищется индексы.
А для того, чтобы был индекс, нужно чтобы имя было известно на стадии
конфигурации. Это достигается, например, фиктивыми charset_map'ами.
Игорь Сысоев
http://sysoev.ru