Начиная с версии PL18 (которая сейчас проходит бета-тестирование),
директивы конфигурационных файлах (и общая идея) сильно изменились.
Поэтому описание синтаксиса директив для версий PL18 и старше
вынесено в отдельный документ.
Служит для описания основных charsets, используемых в сервере.
Синтаксис:
CharsetTable Oficial_Name Table1 [Table2] Language
Oficial_Name
Официальное название charset (например windows-1251, koi8-r, ibm866,
iso_8859-5:1988 и.т.д.)
Table1
Имя файла таблицы, устанавливающей соответствие между внутренним
представлением документов и документов в данном charset при передаче
к клиенту.
Table2
Имя файла таблицы, устанавливающей соответствие между внутренним
представлением документов и документов в данном charset при приеме от
клиента. Может отсутствовать, в этом случае используется таблица,
обратная Table1.
Language
Название языка, к которому принадлежит данный charset. Это название
должно быть определено в conf/srm.conf в директивах AddLanguage и
LanguagePriority.
Каждая директива описывает только один charset. Если существует несколько
виртуальных серверов и в каждом из этих серверов есть необходимость
использовать несколько charsets, то они должны быть описаны для каждого
виртуального сервера в секции <VirtualHost>.
Служит для определения приоритетов сконфигурированных charsets.
Может иметь значение если в запросе клиента указаны равные весовые
коэффициенты для различных charsets или если не указан NativeCharset
то будет использован старший. Синтаксис:
CharsetPriority Charset1 Charset2 Charset3 ...
Charset1 Charset2 ..
Имена charset в порядке убывания приоритета (самый левый имеет высший
приоритет). Все имена Charset должны быть определены до этой директивы с
помощью CharsetTable.
Пример:
CharsetPriority windows-1251 koi8-r ibm866
В именах charset должны использоваться только официальные имена, а не
псевдонимы.
Определяет имя chatset по-умолчанию для данного сервера. Синтаксис:
NativeCharset Charset_Name
Charset_Name
Официальное имя charset по-умолчанию для данного сервера.
Пример:
NativeCharset koi8-r
NativeCharset windows-1251
Определяется для каждого виртуального сервера независимо.
Charset_Name должно быть определено до этой директивы с помощью директивы
CharsetTable.
Внимание! Почему-то многие ошибочно считают, что директива
NativeCharset описывает кодировку, в которой сервер хранит
документы на диске. Это не так. NativeCharset описывает (всего-лишь)
кодировку, в которой документ будет показан клиенту в том случае,
когда все другие способы определения кодировки клиента (заголовок Accept:,
URI Prefix, User-Agent) не сработают. Для того, чтобы поменять
"кодировку на диске" необходимо переопределить описания
Charset. Это можно сделать для сервера в целом или для отдельного
виртуального сервера.
Определяет charset, который может быть использован при нахождении
в запросе клиента подстроки, идентифицирующей данного клиента.
Эта подстрока ищется в запросе клиента в поле User-Agent.
Синтаксис:
Некоторые клиентские программы не могут адекватно реагировать
на MIME, например при получении заголовка
Content-type: text/html; charset=koi8-r; level=3
Чтобы сервер не выдавал таким клиентским программам charset=...
служит эта директива. Синтаксис:
BadAgent Pattern1 Pattern2 Pattern3 ...
Pattern1 Pattern2 ...
Подстрока в поле User-agent запроса клиента, при нахождении
которой сервер будет воздерживаться от выдачи charset=...
Пример:
BadAgent lynx/2.1 arena
Все Pattern являются подстроками, а не regexp выражениями.
Как справедливо заметил
Andrey Chernov,
указывать в этой директиве только название броузера, не указывая
конкретной версии - значит нарываться на неприятности в будущем.
К сожалению, до версии PL14 включительно, вместе с Apache-RUS
распространялся "дистрибутивный" конфигурационный
файл, в котором было сделано именно так (в BadAgent указаны lynx и MSIE).
Начиная с версии PL15 это упущение исправлено. Правильная (на день
написания этого текста - 21 апреля 1997 года) строка выглядит так:
Исключения из списка BadAgent. Эта директива была введена в связи с тем,
что новые версии Lynx требуют указания charset=, в то время как старые
версии при указании charset= ведут себя неадекватно. Т.к.
"старых" версий очень много, то проще описать
"новые" как исключения. Синтаксис:
NotSoBad pattern1 pattern2
Все Pattern являются подстроками, а не regexp выражениями.
Обычное использование - для отделения конкретных версий программы от
всех разновидностей программы:
Директива служит для определения сервером действий при получении
в запросе клиента неизвестного charset. Синтаксис:
RejectErrorCharset On/Off
При установке этого параметра в On сервер не будет выдавать документ в
native charset, а будет сообщать клиенту об ошибке в запросе.
При установке в Off - в любом случае выдаст документ как сможет.
Значение по-умолчанию Off.
По умолчанию, если клиентом не запрошена конкретная code page
сервер пытается ее определить по своему имени, например:
win.www.company.com. Данная директива позволяет запретить
серверу искать требуемый клиенту charset в своем имени.
Синтаксис:
Определяет приоритетность при поиске необходимого charset сервером
между URL и User-Agent. Синтаксис:
CharsetAgentPriority On/Off
При установке этого параметра в On сервер в первую очередь будет
смотреть на поле User-Agent. И если в этом поле он найдет известный
ему шаблон, то примет решение о сконфигурированном charset согласно
директивам AgentCharset. Если же шаблон не будет найден - сервер попытается
найти имя charset в префиксе имени виртуального сервера, к которому обращен
запрос и/или в префиксе затребованного URI.
При установке в Off (это значение по-умолчанию) - наоборот.
"Russian Apache" includes software developed
by the Apache Group for use in the Apache HTTP server project
(http://www.apache.org/) See
Apache LICENSE.
Copyright (C) 1995-2001 The Apache Group. All rights reserved.
Copyright (C) 1996 Dm. Kryukov; Copyright (C)
1997-2009 Alex Tutubalin. Design (C) 1998 Max Smolev.