- CharsetDecl
- Служит для объявления Charset (в русском языке утвердился термин
"кодировка") и указания соответствующего ему
Language. В дальнейших директивах в качестве имени charset можно
указывать только одно из объявленых ранее имен.
Context: сервер, виртуальный сервер.
Default: никаких умолчаний нет
Синтаксис:
CharsetDecl CharsetName Language
- CharsetName
- Официальное название кодировки (например windows-1251, koi8-r, ibm866,
iso8859-5 и.т.д.). Используется в остальных директивах при ссылках
на данную кодировку и при выдаче документа клиенту в заголовке
Content-type: text/html; charset=CharsetName
- Language
-
Название языка, к которому принадлежит данная кодировка. Это название
должно быть определено в conf/srm.conf в директивах AddLanguage и
LanguagePriority.
- Примеры
-
CharsetDecl iso-8859-5 ru
CharsetDecl ibm866 ru
CharsetDecl windows-1251 ru
CharsetDecl koi8-r ru
Каждая директива описывает только один charset. Если существует несколько
виртуальных серверов то каждый виртуальный сервер "наследует"
описания Charset от основного сервера только если в директиве
<VirtualServer> не описано ни одного Charset и нет ни одной
директивы CharsetRecodeTable.
Директивы Charset должны находиться в конфигурационном файле раньше
всех прочих директив модуля.
- CharsetRecodeTable
-
Служит для описания правил перекодировки из одной кодировки в другую.
Context: сервер, виртуальный сервер.
Default: никаких умолчаний нет
Синтаксис:
CharsetRecodeTable Charset1 Charset2 table_from [table_to]
- Charset1, Charset2
- Два названия Charset (описанных ранее директивой Charset),
перекодировка между которыми описывается.
- table_from
- Имя файла с таблицей, описывающей перекодировку из Charset1
в Charset2. Имя файла указывается относительно корневой директории
сервера ($SERVERROOT).
- table_to
- Имя файла с таблицей, описывающей перекодировку из Charset2 в
Charset1. Может отсутствовать, тогда сервер сгенерирует таблицу,
обратную table_from автоматически.
Для каждой пары Charset возможно два описания CharsetRecodeTable, которые
являются эквивалентными. Две нижеприведенные директивы полностью
одинаковы по своему эффекту:
CharsetRecodeTable koi8-r windows-1251 koi-win.tab win-koi.tab
CharsetRecodeTable windows-1251 koi8-r win-koi.tab koi-win.tab
Какую из них использовать - дело вкуса.
Если в конфигурации сервера указано несколько эквивалентных директив,
то в работе будет использована последняя из них.
Если в конфигурации виртуального сервера есть хотя бы одна директива
CharsetDecl или CharsetRecodeTable, то описания
CharsetDecl/CharsetRecodeTable не наследуются от основного сервера.
- CharsetAlias
- Служит для описания имен псевдонимов указанных charset.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: никаких умолчаний нет
Синтаксис:
CharsetAlias Oficial_Name Alias1 Alias2 Alias3 ...
- Oficial_Name
- Официальное имя описываемого charset. Должно быть определено
до данной директивы директивой Charset.
- Alias1 Alias2 ...
- Имена псевдонимов для данного charset.
- Примеры:
-
CharsetAlias iso_8859-5:1988 iso-ir-144 iso_8859-5 cyrillic iso-8859-5
CharsetAlias iso_8859-5:1988 iso8859-5 iso-8859.5 iso8859.5 iso
CharsetAlias ibm866 csibm866 866 cp866 x-cp866 x-ibm866 cp-866 alt
CharsetAlias windows-1251 win x-cp1251 cp1251 cp-1251
Псевдонимы используются при определении кодировки клиента по заголовкам
Accept:, Accept-Charset:, по server-hostname prefix и по URI prefix
(см. директиву CharsetSelectionOrder).
-
CharsetSelectionOrder
-
Директива определяет порядок применения правил определения charset,
в котором документ будет отдан клиенту.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: CharsetSelectionRule Portnumber Hostname Dirprefix Useragent
Синтаксис:
CharsetSelectionOrder Rule1 Rule2 Rule3 ...
- Rule1, Rule2, Rule3
- строка, определяющая порядок анализа различных параметров
запроса на предмет определения клиентских предпочтений.
В качестве имени Rule могут быть использованы:
- Portnumber - определять charset по номеру порта к которому
обратились. Соответствие кодировки и номера порта описывается
директивой CharsetByPort. Возможность
связать номер порта с кодировкой появилась начиная с версии PL20.2.
- Hostname - определять charset по подстроке в hostname сервера.
Т.е. если hostname (до первой точки) сервера начинается
с имени charset
или его alias, то в качестве клиентского charset будет выбран
именно он (т.е. при обращении к хосту win-www.domain будет выбрана
кодировка с именем/алиасом win).
- Dirprefix - определять charset по Directory prefix. Т.е.
если первая часть URI (между 1-м и 2-м '/' или между /~username/
и 3-м slash) совпадает с именем или алиасом какого-то charset,
то в качестве клиентского charset будет выбран именно этот charset.
- Useragent - определять charset по HTTP-заголовку User-Agent
(см директиву CharsetAgent).
Замечания по использованию
При определении charset, в котором документ будет отдан пользователю
сначала анализируются HTTP-заголовки Accept-Charset и Accept (второй - если
эта возможность включена при компиляции сервера, см
рекомендации по установке).
Если эти заголовок Accept-Charset присутствует и запрошенный
charset известен (виртуальному) серверу, то документ будет отдан в
соответствии с просьбой сервера.
Если запрошенный charset серверу неизвестен и не запрашиваетс "любой"
charset (Accept-Charset: *), то поведение сервера зависит от наличия
флага CharsetErrReject - если он
установлен,то сервер вернет пользователю ошибку.
Если charset не может быть определен по Accept-Charset, то сервер
делает попытку определить его в соответствии с директивой CharsetRules
в порядке, описанном этой директивой.
Для определения (установки) по Hostname, первые символы hostname
сервера (виртуального сервера) должны соответствовать имени или
алиасу какого-то из известных серверу
charset.
Для установки по Directory prefix, название или алиас какого-то из
charset должны совпасть с первым элементом path в URL (для запроса вида
/~username/path/to/file.html - совпасть с первым элементом пути после
~username).
Для определения клиентского charset по HTTP-заголовку User-Agent (т.е.
по WWW-броузеру у пользователя) сервер ищет в заголовке User-Agent:
одну из подстрок, указанных в директиве
CharsetAgent.
- CharsetPriority
- Служит для определения приоритетов сконфигурированных charsets.
Может иметь значение если в запросе клиента указаны равные весовые
коэффициенты для различных charsets.
Старший из описанных этой директивой charsset будет использован как
"charset по-умолчанию" в том случае, когда такой charset не
задан директивой CharsetDefault.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: умолчаний нет
Синтаксис:
CharsetPriority Charset1 Charset2 Charset3 ...
- Charset1 Charset2 ..
- Имена charset в порядке убывания приоритета (самый левый имеет
высший приоритет). Все имена Charset должны быть определены до
этой директивы с помощью директивы CharsetDecl.
- Пример:
- CharsetPriority windows-1251 koi8-r ibm866
В именах charset должны использоваться только официальные имена, а не
псевдонимы.
- CharsetSourceEnc
-
Определяет charset, в котором документы хранятся на диске.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: умолчаний нет
Синтаксис:
CharsetSourceEnc Charsetname
- Charsetname
- Имя charset, описанное ранее директивой CharsetDecl
Эта директива позволяет указать в какой кодировке находятся HTML/CGI/SSI
файлы на диске. Она может быть определена в том числе и в .htaccess,
что позволяет хранить дерево документов в произвольной смеси кодировок.
См. также директиву
CharsetByExtension.
Если кодировку хранения файла определить не удается (т.е. директивы
CharsetSourceEnc и CharsetByExtension для данного
расширения не указаны), то сервер вернет клиенту сообщение об ошибке
и отругается в error_log.
- CharsetByExtension
-
Позволяет переопределить charset для файлов с каким-либо расширением.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: умолчаний нет
Синтаксис:
CharsetByExtension Charsetname .ext1 .ext2 ....
- Charsetname
- Имя charset, описанное ранее директивой CharsetDecl
- ext1,ext2,...
- Список расширений файлов, кодировкой которых будет считаться
Charset. Начальную точку в расширении можно указывать, а можно
не указывать.
Эта директива позволяет указать в какой кодировке находятся
файлы с определенным расширением.
Директива имеет больший приоритет, чем CharsetSourceEnc. Если
для данной директории она не определена, то используется (с тем же более
высоким приоритетом) "вышележащее" определение (из .htaccess
директории более высокого уровня или из httpd.conf). Чтобы отключить
вышележащее определение нужно задать пустую директиву
CharsetByExtension.
Расширение файла может содержать в себе любые символы, включая точку.
Использование символа '/' как части расширения лишено смысла т.к. Apache
считает, что '/' не может быть частью имени файла.
- AddHandler strip-meta-http
-
Директива позволяет включить режим удаления тега
<META HTTP-EQUIV=..> из HTML-файлов при передаче их
клиенту.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: умолчаний нет
Синтаксис:
AddHandler strip-meta-http .ext1 .ext2 .....
- AddHandler strip-meta-http
- "магические слова". На самом деле AddHandled - это
директива mime_module, а strip-meta-http - название обработчика.
-
- ext1, ext2
- Список расширений файлов из которых нужно выкусывать
<META HTTP-EQUIV...> Эти файлы будут обрабатываться как
обычный plain HTML (т.е. не как CGI и не как .shtml, вне
зависимости от расширений).
Директива предназначена для того, чтобы включить режим удаления
тегов <META HTTP-EQUIV...> из документов, показываемых клиентам.
Эти теги вставляет, например, Microsoft FrontPage.
Рассуждениям на тему почему эти теги нужно выкусывать
посвящен отдельный документ).
Если для одного расширения указано несколько AddHandler обработчиков,
то какой из них сработает - зависит от конфигурации сервера.
- CharsetDefault
- Определяет имя charset по-умолчанию для данного сервера.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default:Если CharsetDefault не определен, но определен
CharsetPriotity, то будет использоваться charset с
наибольшим приоритетом из CharsetPriority
Синтаксис:
CharsetDefault Charset_Name
- Charset_Name
- Официальное имя charset по-умолчанию для данного сервера,
определенное директивой CharsetDecl.
Пример:
CharsetDefault koi8-r
CharsetDefault windows-1251
Это тот charset, который будет выдаваться клиенту, если все другие
способы определения не сработают.
- CharsetByPort
(работает начиная с PL20.2)
- Директива позволяет связать номер TCP-порта с кодировкой.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: никакого
Синтаксис:
CharsetByPort Charset_Name port_number
- Charset_Name
- Имя charset, описанного директивой CharsetDecl
- port_number
- Номер порта
Пример:
CharsetPort koi8-r 8101
- при обращении к порту 8101 использовать кодировку koi8-r.
Эта директива тесно коррелирует с директивой
CharsetSelectionOrder,
будте внимательны. Например, если у вас написано
CharsetSelectionOrder Hostname, то директива CharsetPort
не оказывает никакого воздействия на поведение сервера (равно как и
CharsetAgent и т.п.).
- CharsetAgent
- Определяет charset, который может быть использован при нахождении
в запросе клиента подстроки, идентифицирующей данного клиента.
Эта подстрока ищется в запросе клиента в поле User-Agent.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: умолчаний нет
Синтаксис:
CharsetAgent Charset_Name Pattern1 Pattern2 Pattern3 ...
- Charset_Name
- Официальное имя charset
- Pattern1 Pattern2 ...
- Шаблоны для поиска в запросе клиента в поле User-Agent.
- Примеры:
CharsetAgent windows-1251 AIR_Mosaic IWENG/1 MSIE WinMosaic (Windows (WinNT;
CharsetAgent windows-1251 (Win16; (Win95; (16-bit)
CharsetAgent koi8-r Arena Ariadna Macintosh OmniWeb Sextant PRD (X11
CharsetAgent ibm866 DosLynx
Все Pattern являются подстроками, а не regexp выражениями. Если в
заголовке User-Agent: содержится несколько подстрок, объявленных
директивой CharsetAgent, то <сработает" самое длинное
совпадение.
- CharsetBadAgent
- Некоторые клиентские программы не могут адекватно реагировать
на MIME, например при получении заголовка
Content-type: text/html; charset=koi8-r; level=3
Чтобы сервер не выдавал таким клиентским программам charset=...
этих клиентов нужно описать директивой CharsetBadAgent.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: умолчаний нет
Синтаксис:
CharsetBadAgent Pattern1 Pattern2 Pattern3 ...
- Pattern1 Pattern2 ...
- Подстрока в поле User-agent запроса клиента, при нахождении
которой сервер будет воздерживаться от выдачи charset=...
- Пример:
- BadAgent lynx/2.1 arena
Все Pattern являются подстроками, а не regexp выражениями.
Как справедливо заметил
Andrey Chernov,
указывать в этой директиве только название броузера, не указывая
конкретной версии - значит нарываться на неприятности в будующем.
К сожалению, до версии PL14 включительно, вместе с Apache-RUS
распространялся "дистрибутивный" конфигурационный
файл, в котором было сделано именно так (в BadAgent указаны lynx и
MSIE). Начиная с версии PL15 это упущение исправлено. Правильная
(на день написания этого текста) строка выглядит так:
CharsetBadAgent arena Lynx/2.0 Lynx/2.1 Lynx/2.2 Lynx/2.3 Lynx/2.4 "MSIE 2.0;"
- CharsetErrReject
- Директива служит для определения сервером действий при получении
в запросе клиента неизвестного charset.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default:CharestErrReject Off
Синтаксис:
CharsetErrReject On|Off
При установке этого параметра в On сервер не будет выдавать документ
клиенту в случае невозможности удовлетворить запрос, полученный
в заголовках Accept/Accept-Charset, а будет сообщать клиенту об
ошибке в запросе.
При установке в Off - попытается определить charset по другим
параметрам (см директиву
CharsetSelectionOrder)
и выдаст документ как сможет.
- CharsetMatchLanguage
- Директива определяет случаи, в которых сервер будет выдавать
charset=xxx в заголовке Content-Type:.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: CharsetMatchLanguage On
Синтаксис:
CharsetMatchLanguage On|Off
При установке этого параметра в On (значение по умолчанию) сервер
выдает charset=... в заголовке Content-Type при соблюдении всех трех
условий:
- Броузер клиента не является "bad agent"
- Включена опция MultiViews
- Language, описанный для данного типа документа директивой
AddLanguage совпадает с language, описанным для выдаваемого
charset директивой CharsetDecl
При установке флага в Off сервер проверяет только первое условие
(соответствие User-Agent/bad-agent list).
- CharsetRecodeHeaders
(работает начиная с PL20)
- Директива включает перекодировку заголовков выдаваемых в HTTP-response.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: CharsetRecodeHeaders Off
Синтаксис:
CharsetRecodeHeaders On|Off
При установке этого параметра в On будут перекодироваться выдаваемые
сервером заголовки. По-умолчанию такой перекодировки не производится
т.к. старые версии не перекодировали и возникают серьезные
проблемы с совместимостью. Директиву нужно использовать, если в
заголовках может быть русский текст (скажем, Location: /some.cgi?Вася)
- CharsetTurnOff
(работает начиная с PL20)
- Директива выключает весь charset-processing module. Т.е. никакая
перекодировка для данной <Directory>, <Location> и т.п.
производиться не будет.
Context: сервер, виртуальный сервер, <Directory>,
<Location>, .htaccess
Default: CharsetTurnOff Off
Синтаксис:
CharsetTurnOff On|Off