[an error occurred while processing this directive]
Список изменений и исправлений

PL30.7 Apache 1.3.20, 04 Oct 2001, Alex Tutubalin
  1. Окончательно исправлена проблема с floating point excption, возникавшая иногда на запросах с слишком большим количеством charsets в заголовке Accept-Charset

PL30.6 Apache 1.3.20, 02 Oct 2001, Alex Tutubalin
  1. Восстановлен утерянный в PL30.5 каталог os/cygwin
  2. Исправлена ошибка, которая приводила к floating point error при наличии в запросе Accept-Charset: cset q=... с количеством q= более 5
  3. Исправлена ошибка в обработке Accept-Charset - при выборе среди нескольких Charsets с одинаковым приоритетом не учитывался CharsetPriority

PL30.5, Apache 1.3.20, 02 Jul 2001, Alex Tutubalin
  1. Миграция на apache 1.3.20
  2. Исправлена ошибка из-за которой добавлялся пробел в хвост заголовоков при включенном CharsetRecodeHeaders

PL30.4, Apache 1.3.19, 10 Mar 2001, Alex Tutubalin
  1. Миграция на apache 1.3.19

PL30.3, Apache 1.3.17, 05 Feb 2001, Alex Tutubalin
  1. Исправлена ошибочка в Makefile.tmpl, внесенная в PL30.2 Она затрагивала только установку "с нуля", upgrade происходил нормально.

PL30.2, Apache 1.3.17, 04 Feb 2001, Alex Tutubalin
  1. Миграция на apache 1.3.17
  2. configure --permute-module=... теперь не приводит к тому, что mod_charset вкомпилируется дважды
  3. Расположение таблиц переконфигурации теперь подменяется на лету, как следствие configure --with-layout теперь работает более корректно

PL 30.1 Apache 1.3.14, 04 Feb 2001, Alex Tutubalin
  1. Вставлены очередные правки в windows makefiles by Dmitry Pashko
  2. В дистрибутивный CharsetAgent koi8-r добавлена подстрока X11) - это делает счастливым Mosaic 5 (из KDE2)

PL 30.0, Apache 1.3.14, 15 Oct 2000, Alex Tutubalin
Правки от Дмитрия Пашко, которые уже довольно давно использубтся в Rambler:
  1. Новые функции чтения таблиц перекодировки, которые ругаются при возникновении неоднозначности
  2. Поправлены необходимые makefiles и src/os/src/os/win32/modules.c и теперь все должно собираться по Win32 (версия 1.3.12 точно собирается и работает).
  3. Добавлен новый набор таблиц перекодировки для русского и украинского языка.
Цитирую автора:
Это таблицы преобразования для восьми кодировок, содержащих
кириллицу:
ibm866 	iso-8859-5 koi8-r koi8-u Mac Cyrillic Mac Cyrillic-U
UTF7 UTF8 Windows-1251 Таблицы сгенерированы автоматически на основе таблиц,
поддерживаемых NLS WinNT.

Таблицы поддерживают преобразование разных "хитрых" символов,
содержащихся в этих таблицах. Например, символ кавычки-елочки
'<<' будет правильно преобразован из Win-1251 в Mac Cyrillic, 
(в обеих страницах он есть) и будет преобразован в обычную
кавычку при переходе, скажем к koi8-r (там его нет).

Все таблицы неоднозначные! Поэтому грузить их нужно обязательно
попарно:
CharsetRecodeTable koi8-r ISO-8859-5 conf/tables/cyrillic/koi-iso.tab conf/tables/cyrillic/iso-koi.tab

Желаю успехов!

Дмитрий Пашко (dap@stack.net)
    

PL 29.9, Apache 1.3.14, 15 Oct 2000, Alex Tutubalin
  1. В дистрибутивной конфигурации закомментарены AddCharset для русских кодировок - их использование приводит к странным последствиям.
  2. В функции parse_urlprefix исправлена опечатка, приводившая к warning при компиляции.

PL 29.8, Apache 1.3.14, 14 Oct 2000, Alex Tutubalin
Миграция на Apache 1.3.14
Внимание. Механизм charset negotiation в apache 1.3.14 вроде-бы работает, но его применение дает достаточно дикие результаты (Netscape/X11 подсовывается cp866, дальше я не стал проверять). Поэтому применение этого механизма кажется проблематичным и директивы AddCharset для русских документов применять не следует.

PL 29.7, Apache 1.3.12, 20 Jul 2000, Alex Tutubalin
Очередные изменения с обработкой POST
  1. если включена перекодировка, то в явном виде не поддерживается chunked post (если это является реальной проблемой т.е. есть клиенты которые его шлют, то скажите об этом)
  2. В charset_bread более жестко проверяется условие readahead и не делается попыток читать дальше чем content-length запроса.

PL 29.6, Apache 1.3.12, 20 Jul 2000, Alex Tutubalin
  1. В очередной раз исправлена проблема с charset_bread - теперь можно читать данные кусками произвольной длины, чередуя длины в произвольном порядке. В PL29.5 была ошибка, приводившая к coredump при чтении по одному байту.

PL 29.5, Apache 1.3.12, 16 Jul 2000, Alex Tutubalin
  1. Исправлена бага с charset_bread из-за которой POST не всегда передавался до конца. Спасибо Виктору Хименко <khim@sch57.msk.ru> за патч, сам бы я долго еще не собрался.
  2. Исправлен синтаксис комментариев в файлах таблиц для CharsetWideRecodeTable - теперь комментарием считаются только строчки начинающиеся с # или с 'пробелы#'. Это позволяет писать в правую часть таблиц конструкции с символом #
  3. Auto-Redirect выдается только для методов GET и HEAD, что должно вылечить проблему с редиректом POST-а

PL29.4, Apache 1.3.12, 27 Feb, 2000, Alex Tutubalin
  1. Переезд на Apache 1.3.12
  2. Директивы AddCharset (mod_mime) и AddDefaultCharset (core) продолжают работать, но mod_charset имеет более "сильное" действие - если данный URL перекодируется им, то charset поставленый директивами "стандартного" Apache подменяется. Если URL не обрабатывается mod_charset-ом, то сохраняется поведение стандартного Apache 1.3.12
  3. (замечания)
    • при включенном AddDefaultCharset все редиректы имеют content-type iso-8859-1, но непонятно как к этому отнесутся броузеры
    • Поведение 'content negotiation' при одновременном наличии AddCharset и AddLanguage кажется мне странным, но это feature базового Apache, я тут не виноват.

PL29.3, Apache 1.3.11, Jan 30, 2000, Alex Tutubalin
  1. Переезд на Apache 1.3.11
  2. При переезде пострадала (удалена) директива AddCharset от mod_mime

PL29.2, Apache 1.3.9, Nov 26, 1999, Alex Tutubalin
  1. Второй подход к решению проблемы с Content-Encoding Теперь mod_charset "выключается" на этапе вывода в таких случаях
    • r->content_encoding не пуст (эту переменную ставит mod_mime*)
    • в заголовках отдаваемых пользователю есть что-то на тему Content-Encoding (а так работает mod_cgi - пользовательский заголовок Content-Encoding не анализируется)
  2. Появился compile-time #define MOD_CHARSET_DEFAULT_CHAR (в src/modules/extra/mod_charset.h) который указывает, какой символ будет выводиться пользователю вместо \x00. Умолчание - 0x20 (пробел)

PL29.1, Apache 1.3.9, Nov 26, 1999, Alex Tutubalin
  1. Если у выходящего документа выставлена Content-Encoding, то перекодировка выключается (и charset=.. в Content-Type не ставится). Это, конечно, quick-n-durty fix, если вдруг найдется Content-Encoding, которую нужно побайтово перекодировать - проблема будет решаться иначе.
  2. При Auto-Redirect на префикс директории корректно обрабатываются запросы без trailing slash т.е. /koi8-r теперь не редиректится на /koi8-r/koi8-r/
  3. До выяснения обстоятельств, из дистрибутивной конфигурации убраны ссылки на таблицы перекодировки russian2
  4. По просьбе общественности, в дистрибутивную конфигурацию добавлена AddHandler strip-meta-http .htm .html (это должно сильно помочь сайтам, которые ставят Russian Apache по-умолчанию, не редактируя конфиг)

Pl29.0, Apache 1.3.9, Nov 5, 1999, Alex Tutubalin
Добавлена поддержка таблиц перекодировки для украинского языка.
  1. Таблицы win-mac.tab и mac-win.tab пропатчены патчами от Вадима Чекана <vadim@gc.lviv.ua>. Цитирую его замечания: "Кроме того, не перекодируются украинские буквы , знак номера и типографские скобки в таблицах win-mac.tab, mac-win.tab"
    Я в этом ничего не понимаю, поэтому правки - as is
  2. В директорию conf/tables/ukrainian положены таблицы перекодировки, присланные Вадимом (в конфигурации есть пример использования)
  3. В директорию conf/tables/ukrainian2 положены "альтернативные" таблицы, которые мне прислал Сергей Глодин (<hlodin@lutsk.bank.gov.ua>). Цитирую его письмо:
    "В поставку влючены таблицы перекодировки для RUSCII (государственный стандарт в Украине), KOI8-U (это уже утвержденный международный стандарт), Windows (с учетом украинских символов и специальных символов, которые преобразуются в подобные по начертанию печатные символы) и 866 (с учетом украинских букв). Hедостающие таблицы перекодировки (ISO to DOS/WIN/KOI/MAC/RUSCII, MAC to DOS/WIN/KOI/RUSCII/ISO и KOI to DOS/WIN/ISO/MAC/RUSCII) при необходимости берутся из стандартной поставки (с каталого russian)."
Так как я не знаю, какие таблицы лучше, то пусть сообщество решит и сообщит мне свое решение :)

Pl28.22, Apache 1.3.9, Oct 12, 1999, Alex Tutubalin
  1. Перед перекодировкой r->args (в скриптах это QUERY_STRING) и r->path_info ($PATH_INFO), оригинальные неперекодированные значения сохраняются в переменных CHARSET_SAVED_QUERY_STRING и CHARSET_SAVED_PATH_INFO

Pl28.21, Apache 1.3.9, Oct 8, 1999, Alex Tutubalin
  1. В httpd.conf - название для чешского языка изменено с cz на cs
  2. Переменные окружения REDIRECT_FORCE_CHARSET и REDIRECT_FORCE_SOURCE_CHARSET воспринимаются так же, как FORCE_CHARSET/FORCE_SOURCE_CHARSET (т.е. если был Internal redirect, то установленные ранее переменные окружения не потеряются)

PL28.20, Apache 1.3.9, Sep 19, 1999, Alex Tutubalin
  1. Нормализация URL (CharsetNormalize*) не выключает перекодировку Я не очень понимаю случай, когда такая перекодировка может понадобится, но красоты для.
  2. Появилась возможность задавать исключения в перечислении mime-types (директивы CharsetProcessType,CharsetNormalizeTypes): type/subtype !type2 !type3/subtype type3/ Параметры обрабатываются слева направо, поэтому если нужно обработать все типы, кроме какого-то конкретного, то писать нужно:
        !type/subtype type/
    
    В обратной ситуации (необходимо обработать конкретный type/subtype, но не обрабатывать type/*) синтаксис тоже будет обратным:
        type/subtype !type/
    

PL28.19, Apache 1.3.9, Sep 14, 1999, Alex Tutubalin
  1. Добавлена возможность задавать исходную кодировку документа путем установки переменной FORCE_SOURCE_CHARSET

Pl28.18, Apache 1.3.9, Sep 02, 1999, Alex Tutubalin
  1. Заголовок Vary теперь выдается только если ответ имеет версию большую HTTP/1.0. За счет этого начала работать переменная окружения force-no-vary.
  2. Сделана совместимость по патчам с mod_ssl 2.4.1.

PL28.17, Apache 1.3.9, Aug 21, 1999, Alex Tutubalin
  1. Переезд на Apache 1.3.9
  2. Мелкие исправления в default httpd.conf (translit не называется теперь koi7, а iso-8859-5 - cyrillic)

PL28.16, Apache 1.3.6, Jun 21, 1999, Alex Tutubalin
  1. В переменную окружения CHARSET_DETERMINED_BY пишется способ, которым была определена кодировка клиента (одна из строчек: "Unknown", "AcceptCharset", "Dirprefix", "Hostname", "URIHostname", "Portnumber", "EnvVariable", "UserAgent", "Default", "FirstInList")
  2. Если mod_charset выключен (CharsetDisable On), то нормализация "картинок" (CharsetNormalizeToURL) теперь не производится.
  3. Добавлена директива CharsetNoAutoRedirectForDefaultCharset On/Off (да, теперь все названия будут такие идиотские). Ее предназначение - выключить AutoRedirect если кодировка клиента определена не по Accept-Charset/URI/UserAgent (т.е. по CharsetDefault или просто 1-я кодировка в списке). В результате поисковые системы не описанные в UserAgent будут вместо редиректа получать содержимое сервера на порту по-умолчанию.

PL28.15, Apache 1.3.6, Apr 11, 1999, Alex Tutubalin
  1. В очередной раз изменена работа с subrequests/redirects (это касается только перекодировки параметров CGI/path-info).
    • перекодировка параметров не производится, если content-type=httpd/unix-directory (т.е. перекодировка параметров при запросе вида /dir/?aaa=ку-ку произойдет только после успешного нахождения index.cgi/index.html).
    • для subrequests не происходит перекодировки параметров CGI, имен файлов, path info и так далее. Таким образом, если в SHTML-документ в одной кодировке включаются cgi-и в другой кодировке, то они получат параметры в кодировке включающего документа (как и было ранее)
    • если происходит цепочка internal redirects, то перекодировка параметров произойдет для первого из них, URL которого не является каталогом (см выше). Таким образом, если в процессе internal redirects происходит переход на документ с другой кодировкой "на диске" (скажем RewriteRule /cgi.win /cgi.koi), то второй скрипт (на который был редирект) получит параметры от пользователя в кодировке первого (откуда был редирект)
    Это все не касается метода POST и собственно выдачи документов пользователю - при POST перекодировка производится только когда получатель окончательно определен (но зато невозможен и query rewrite), а при выдаче документов возможно собирать их из кусочков в разных кодировках.

PL28.14, Apache 1.3.6, Apr 9 1999, Alex Tutubalin
  1. Еще более корректное определение, нужно ли обрабатывать internal redirect - он не обрабатывается, если для его родителя определение кодировки уже было проведено.

PL28.13, Apache 1.3.6, Apr 7 1999, Alex Tutubalin
  1. вернулось на место то же поведение, которое было у Apache 1.2.x rus/PL NN - если происходит internal redirect, то никаких повторных определений кодировки не происходит. У subrequests - происходит В противном случае, при использовании Action происходила двойная перекодировка параметров.
  2. исправлена ошибка в ap_rwrite, приводившая к тому, что при выключенном mod_charset эта функция ничего не выводила клиенту.

PL28.12, Apache 1.3.6, Mar 25 1999, Alex Tutubalin
  1. Переезд на Apache-1.3.6

PL28.11, Apache 1.3.5, Mar 21 1999, Alex Tutubalin
  1. Переезд на Apache-1.3.5
  2. Убраны несколько compile-time warnings из mod_charset.c

PL28.10, Apache 1.3.4, Mar 12 1999, Alex Tutubalin
Доделана обработка случая, когда таблица перекодировки из кодировку "на диске" в кодировку клиента не найдена
  1. Charset в заголовке соответствует charset на диске и явно переписывается если клиентский скрипт выдал не свой charset в content-type
  2. Заголовки Expires, Vary, ETag выдаются как если бы таблица была найдена (если для данного URL перекодировки быть не может никогда, то нужно просто выключать для него mod_charset)
  3. Делается попытка найти свойства charset "на диске" по его имени, если это не выходит, то используются свойства charset, определенного для клиента (это влияет в настоящее время только на выдачу/невыдачу charset= при включенном CharsetUseMultiViews и/или при наличии флага S у CharsetDecl для одного из этих charset).

PL28.9, Apache 1.3.4, Mar 10 1999, Alex Tutubalin
  1. Если mod_charset выключен, то content-type: .. charset= доезжает до клиента без изменений.
  2. Если сервер не может найти таблицу перекодировки из Source charset, то имена кодировок "на диске" и "клиентской" устанавливаются в SourceCharset, никакой перекодировки не происходит, а выдача charset=name в Content-Type происходит в соответствии с установками CharsetAgent/UseMultiViews/флагом S для WideRecodeTable
  3. В httpd.conf добавлен пример настроек для просмотра документации Russian Apache.

PL28.8,27.8, Apache 1.3.4, Mar 5 1999, Alex Tutubalin
  1. (httpd.conf) В строчки CharsetAgent добавлено (Win98; (может быть написать просто (Win ? )
  2. (httpd.conf) Исправлен путь до koi-utf8.tab
  3. Поправлены функции, читающие таблицы перекодировки:
    • разделителем в строке могут быть табуляции и пробелы в любом количестве
    • строка-комментарий может начинаться не с первого символа строки
  4. (PL28.8) - при редиректе (CharsetAutoRedirect) сохраняется #anchor (Замечание. Netscape 3.x/4.0x не передает #anchor в запросе, про остальные не знаю)

PL28.7, Apache 1.3.4, Feb 27, 1999, Alex Tutubalin
  1. Редиректа не происходит, если каким-то модулем выставлена переменная окружения CHARSET_NOREDIRECT (можно использовать вместе с RewriteRule или BrowserMatch)
  2. В нормализаторе URL "картинок" не делается никаких предположений относительно номера порта по-умолчанию. Если хочется брать картинки с 80-го порта, то придется писать CharsetNormalizeToURL http://server:80
  3. В случае, если исходный URL имеет вид /~user в strncmp никогда не передается NULL (что приводило к падению в core на некоторых системах)
  4. Добавлена директива CharsetRedirectFromOriginalURL (умолчание - Off). Если она On, и URL менялся в процессе обработки внутри Apache (например, за счет флага PT у RewriteRule), то редирект будет происходить относительно оригинального URL. Замечание. В качестве side effect все специальные символы будут переписаны в %AA-form (/a.cgi?a=ии+ыы => /a.cgi%3fa=%c9%c9+%d9%d9)

PL28.6, Apache 1.3.4, Feb 15, 1999, Alex Tutubalin
  1. Если в CharsetAutoRedirect был указан URL вида http://server/, то ошибочно подразумевалось http://server:80/ Теперь если порт не указан, то сохраняется текущий.

PL28.5, Apache 1.3.4, Feb 15, 1999, Alex Tutubalin
  1. Если mod_charset выключен, то в ra_codep явно записывается NULL, чтобы избежать случая, когда в request_rec записан бред.
  2. Исправлена ошибка с объединением CharsetAutoRedirect из разных директорий, теперь эта директива не влияет на вышележащие директории
  3. Добавлен параметр none у CharsetAutoRedirect и CharsetNormalizeToURl. CharsetAutoRedirect koi8-r none запрещает redirect для данного charset.
  4. В исходных текстах тип pool везде заменен на ap_pool в духе именования типов данных в Apache.
  5. CharsetNormalizeTypes по-умолчанию не содержат никаких типов, все нужно делать из конфигфайла.

PL28.4,PL27.7, Apache 1.3.4, Feb 13, 1999, Alex Tutubalin
  1. Если в content-type, полученном от скрипта присутствовал charset=, то он удаляется. Правильный charset= подставляется, если текущие настройки это позволяют
  2. Если от клиента пришел content-type с charset=, то charset подменяется на правильный.

PL28.3, Apache 1.3.4, Feb 05, 1999, Alex Tutubalin
  1. Редирект на картинки (нормализация) выдается только для запросов, которые не являются sub-requests. В противном случае не работает #include virtual на CGI с абсолютным путем
  2. Редирект на документы выдается с кодом HTTP_MOVED_TEMPORARILY (302) на случай, если найдется proxy, кэширующий редиректы.

PL28.2, Apache 1.3.4, Feb 05, 1999, Alex Tutubalin
  1. Редирект выдается только для запросов, которые не являются sub-requests. Иначе не работает SSI в случае, когда документ с выключенной перекодировкой (и выключенным редиректом!) включает документ с включенной перекодировкой.
  2. При включенном AutoRedirect и url вида http://server/~user происходит правильный редирект, а не coredump

PL27.6, Apache 1.3.4, Feb 05, 1999, Alex Tutubalin
  1. В mod_dir вернулся код, отвечающий за подстановку правильного номера порта при редиректе http://server:port/dir -> http://server:port/dir/ Этот код, судя по всему, был утерян при переезде apache 1.2.6->1.3.0

PL28.1, Apache 1.3.4, Feb 04, 1999, Alex Tutubalin
  1. При наличии нескольких директив CharsetAutoRedirect charset ... для одного charset срабатывать будет последняя. Корректно объединяются CharsetAutoRedirect из разных секций (скажем, .htaccess и <Files>)
  2. В директиве CharsetAutoRedirect можно задать только порт (что может быть полезно, если есть много виртуальных серверов). Синтаксис CharsetAutoRedirect koi8-r :8080 (т.е. :номер_порта)
  3. Код обеспечивающий AutoRedirect теперь корректно работает с URL вида /~user/path при редиректе "на /~user/кодировка/path"

PL28.0, Apache 1.3.4, Feb 02, 1999, Alex Tutubalin
  1. Добавлены директивы CharsetAutoRedirect, CharsetNormalizeTypes, CharsetNormalizeToURL, предназначенные для автоматичекого перенаправление пользователя на URL с "кэшируемым" содержимым.

PL27.5, Apache 1.3.4, Jan 31, 1999, Alex Tutubalin
  1. Исправлена недоработка: теперь если список CharsetAgent пуст, то заголовок User-Agent не проверяется и Expires не ставится.

PL27.4, Apache 1.3.4, Jan 14, 1999, Alex Tutubalin
  1. Миграция на Apache 1.3.4
  2. В поставку добавлены альтернативные таблицы перекодировки by Victor B Wagner <vitus@ice.ru> в которых правильно обрабатывается неразрывный пробел

PL27.3, Apache-1.3.3, Oct 31, 1998, Alex Tutubalin
  1. Исправлена ошибка в charset_bread из-за которой сервер мог давать core на длинных (больше 8192 байта) POST

PL27.2, Apache-1.3.3, Oct 29, 1998, Alex Tutubalin
  1. Исправлена опечатка в функции API ra_charset_name(), теперь эта функция работает как ожидается.

PL27.1, Apache-1.3.3, Oct 28, 1998, Alex Tutubalin
  1. Исправлена опечатка в функции API ra_recode_str_esc(), теперь эта функция работает как ожидается.

PL27.0, Apache-1.3.3, Oct 27, 1998, Alex Tutubalin
  1. Добавлена директива CharsetDisableAcceptCharset On/Off, которая запрещает (если On) обработку заголовка Accept-Charset. Предназначена для использования на URL с жесткой кодировкой.
  2. Разработан 'Russian Apache C API' - стандартный интерфейс с перекодировочным модулем. Может использоваться другими модулями для перекодировки. Подробности см. в http://apache.lexa.ru/notes.html#api.

PL26.5, Apache-1.3.3, Oct 10, 1998, Alex Tutubalin
  1. Перенос на Apache-1.3.3

PL26.4, Apache-1.3.2, Sep 23, 1998, Alex Tutubalin
  1. Перенос на Apache-1.3.2
  2. Убран патч от sioux attack т.к. Apache-1.3.2 содержит необходимые правки.

PL26.3, Apache-1.3.1, Sep 16, 1998, Alex Tutubalin
  1. strcasestr в mod_charset.c заменена на менее убогую версию. Отдельное спасибо Valera V.Kosmodamiansky <valera@altos-r.sbnet.ru>
  2. поправлена привнесенная в PL26.2 ошибка в ap_rputs - ошибочно выводился NULL из хвоста строки.

PL26.2, Apache-1.3.1, Sep 11, 1998, Alex Tutubalin
  1. (Experimental!) ap_rwrite/ap_rputs/ap_rvputs теперь возвращают число байт, которое было запрошено для записи, а не столько, сколько записано на самом деле. Это может помочь модулям, которые учитывают эти значения при записи длинных данных.

Apache 1.3.1 PL26.1, 26-28 Aug 1998, Alex Tutubalin
  1. Если выбор кодировки был сделан по EnvVariable или по URIHostname, то выдача сервера тоже будет кэшируемой (как и для Hostname/Portnumber/Dirprefix)
  2. Исправлена опечатка в дистрибутивном httpd.conf (на работу в дистрибутивной конфигурации она не влияла :), добавлено AddLanguage ru .ru в srm.conf

Apache 1.3.1 PL26.0, 18-19 Aug 1998, Alex Tutubalin
  1. Не перекодируются аргументы CGI при обращении к директориям. Как побочный эффект :) получено поведение, когда запрос вида http://foo.net/?абвг работает нормально даже если его обрабатывает http://foo.net/index.cgi
  2. На старые директивы CharsetTurnOff и CharsetMatchLanguage сервер ругается в error_log и при старте (loglevel warn), в следующих версиях эти директивы будут удалены совсем.
  3. При сборке с -DRUSSIAN_APACHE_DEBUG сервер пишет много всего интересного про каждый запрос в error_log (loglevel debug). В дальнейшем я буду просить (или требовать - еще не решил:) присылать мне такие логи в составе problem report
  4. Добавлены два новых правила в CharsetSelectionOrder - EnvVariable и URIHostname. EnvVariable позволяет задать Charset через переменную окружения FORCE_CHARSET, например с помощью mod_rewrite (правилом вида [E=FORCE_CHARSET:mycharset]) или с помощью mod_setenvif. Подробности описаны в http://apache.lexa.ru/configure.html#charsetselectionorder Данная директива может быть использована для замены CharsetSelectionOrder Useragent без простановки Expires. Никаких специальных мер для борьбы с этим не предпринято.
    URIHostname действует аналогично Hostname, но имя charset сравнивается не с каноническим именем сервера, а с именем, полученным от клиента в заголовке Host:. Примеры применения в http://apache.lexa.ru/notes.html.

Apache 1.3.1 PL25.10, 16 Aug 1998, Alex Tutubalin
  1. Приложен патч, мешающий переполнению Apache HTTP-заголовками (sioux attack).
  2. Убрана интерференция с mod_rewrite - теперь перекодируется только окончательный продукт rewrite, а промежуточные стадии игнорируются. Т.е. теперь аргументы CGI перекодируются только однократно
  3. Убрана правка строки #define SERVER_BASEVERSION, теперь всякие странные патчи вроде Apache-SSL не будут вызывать reject в этом месте. Версия сервера ставится через ap_add_version_component. В результате вместо Server: Apache/1.3.1 rus/PLNN (Unix) выдается Apache/1.3.1 (Unix) rus/PLNN.

Apache 1.3.1 PL25.9 4 Aug 1998, Alex Tutubalin
  1. Внесены несущественные правки, убирающие warnings при компиляции. Теперь при сборке необходим компилятор, знающий про const, но сам apache тоже требует такого.
  2. первые два аргумента функции charset_vbprintf поменяны местами и стало "как в 1.2.6 PL NN". В результате Russian Apache восстановил совместимость с PHP 3.0.2a
  3. В комплект добавлена таблица перекодировки koi8->utf8 (как 'wide-table' т.е. только в одну сторону).
  4. strip-meta-htt handler поправлен патчем от Michael Macek <mm@czech.net> - теперь этот handler опять выдает ETag и правильно реагирует на If-Modified-Since
  5. mod_charset теперь конфигурируется через ConfigStart/ConfigEnd т.е. одной строчкой в конфигурации стало меньше и можно собрать сервер без mod_charset (но собрать его как DSO все-равно нельзя). По-умолчанию mod_charset включен.

Apache-1.3.1 PL25.8, Apache 1.3.1, 3 Aug 1998, Alex Tutubalin
Произведен переезд на Apache-1.3.1

PL25.8 11-13 Jul 1998, Alex Tutubalin
  1. Поправлена ошибка в strip-meta-http handler - раньше ставился неверный заголовок Last-Modified (Thu, 01 Jan 1970 00:00:01 GMT).
  2. В поставку включены таблицы перекодировки для чешского языка
  3. patches_NNN теперь делаются как unified diff, в результате бутерброд из apache_1.3.0 + patches-RUS + apache-SSL работает.

PL25.7, Apache 1.3.0, 18 Jun 1998, Alex Tutubalin
PL24.1, Apache 1.2.6, 18 Jun 1998, Alex Tutubalin
  1. Поправлена ошибка от которой httpd падал в core, если от пользователя приходил Accept-Charset: описанный в CharsetBrokenAccept, а заголовка User-Agent нету (такое случается при работе через squid'овый anonymizer).
    Замечание. Если у вас используется CharsetBrokenAccept, а клиент пришел без User-Agent, то эта халабуда не сработает. И, например, отдаст клиенту iso8859-1 (если он у вас есть), даже если клиент этого не хочет. Спасибо авторам Сквида.

PL25.6 . Apache 1.3.0, 13 Jun 1998, Alex Tutubalin
  1. suexec теперь компилируется с -DRUSSIAN_APACHE даже если делать это через ./configure --with-suexec
  2. configure поправлен на тот счет, чтобы mod_charset никогда не собирался как DSO. Теоретически такая сборка возможна, но практически в ней нет смысла - без патченого http_protocol.c/httpd.h оно все-равно работать не будет.
  3. Исправлен код, обрабатывающий подзапросы. Теперь оно не падает в core и корректно обрабатывает включения (через SSI) документов в разных кодировках. Внимание. Если вы включаете что-то через SSI и это что-то обрабатывает параметры ($REQUEST_URI, $QUERY_STRING, или #include virtual="some.cgi?a=b"), то это что-то получит параметры в кодировке хранения включающего (внешнего) документа. К сожалению, добиться более корректной работы без существенного понижения эффективности обработки подзапросов пока не удалось, а подзапросов может быть очень много (например, при генерации листингов директории)
  4. Добавлена директива CharsetUseMultiViews, полный аналог CharsetMatchLanguage. в районе выхода из бета-тестирования, старые директивы будут включаться (для совместимости) отдельным ключом компиляции. Значение по умолчанию стало Off - у кого не было в конфигурации CharsetMatchLanguage Off придется явно поставить CharsetUseMultiViews On.

PL25.5. Apache 1.3.0, 11 Jun 1998, Alex Tutubalin
  1. Исправлена ошибка в http_request.c, добавленная в PL25.4

PL25.4. Apache 1.3.0, 11 Jun 1998, Alex Tutubalin
  1. Как и в 1.2.6, subrequests наследуют информацию о charset от родителя.
  2. Чтобы mod_dir и прочие делали redirect на правильный номер порта, в дистрибутивной конфигурации написано UseCanonicalName Off (В результате, в CHARSET_SERVER_PORT и в SERVER_PORT будет одно и то же)

PL25.3, Apache 1.3.0, 10-11 Jun 1998, Alex Tutubalin
  1. suexec теперь пропускает Russian Apache specific переменные окружения (CHARSET*, SOURCE_CHARSET) и переменную LANG

PL25.2, Apache 1.3.0, 8 Jun 1998, Alex Tutubalin
  1. nph-скрипты теперь обрабатываются как раньше т.е. без всяких попыток перекодировки. Попыток перекодировки делать нельзя т.к. сервер не знает (и даже не делает попытки узнать) content-type выдаваемый скриптом т.е. отличить картинки от текста для nph- невозможно.

PL25.1, Apache 1.3.0, 8 Jun 1998, Alex Tutubalin
  1. Исправлена бага в strip-meta-http, теперь оно работает
  2. patches_xxx теперь делаются в новом формате - .tar.gz файл в котором лежат патчи к измененным файлам и добавленные (к родному Apache) файлы в первозданном виде


PL25.0, Apache 1.3.0, 6-7 Jun 1998, Alex Tutubalin
  1. Миграция на Apache-1.3.0
  2. (experimental) Для запроса If-Modified-Since может выдаваться NOT_MODIFIED, даже если в нормальной выдаче был бы заголовок Expires. В надежде на то, что transit proxy cache не кэшировал старый запрос из-за Expires (в PL19-PL24 Not-Modified не выдавался никогда)
  3. Для выдачи с byteranges, кроме byterange=... выдается еще и charset=..
  4. Добавлена директива CharsetDisable - полный аналог CharsetTurnOff
  5. вместо директивы препроцессора -DUSE_TRANSFER_TABLES используется -DRUSSIAN_APACHE
  6. При перекодировке без сохранения длины (translit) Content-Length не выдается никогда. Возможно, это стоит поправить.
  7. добавлен ключ препроцессора -DRUSSIAN_APACHE_TEST, который добавляет Handler ra-test. Этот Handler выводит русскими буквами заголовок X-RA-Test: Русский Апач (в %AA%BB-виде) и некоторое количество текста используя Apache API (rputc/rputs/и так далее) Назначение - проверить правильность работы Apache API, Использоваие - AddHandler ra-test
  8. Код, обрабатывавший Accept: text/x-cyrillic-... удален


PL24.0, Apache 1.2.6, 17 May 1988, Alex Tutubalin
  1. Добавлена директива CharsetDisableForcedExpires, которая запрещает выдачу заголовка Expires модулем руссификации. Добавлена по требованию (настойчивому желанию) Sergey Vovk <vsv@macomnet.ru>, к использованию не рекомендуется по очевидным причинам
  2. Opera 3.0 добавлена в дистрибутивный список распознаваемых User-Agents


PL23.0, Apache 1.2.6, 4 Apr 1998, Alex Tutubalin
    1. Добавлены директивы для манипулирования поведением сервера в зависимости от вида запроса:
    CharsetRecodeMultipartForms On|Off (умолчание - On) - в(ы)ключает перекодировку для запросов с Content-Type: multipart/form-data. Это лечит частный случай file uploads - если вы ожидаете upload двоичных файлов, которые перекодировать нельзя, то эта директива помогает эту перекодировку выключить. При этом переменные CHARSET, SOURCE_CHARSET и так далее доступны из скрипта (в отличие от CharsetTurnOff On)
    CharsetRecodeMethodsIn GET POST PUT ALL NONE (можно указывать любое число этих слов) - позволяет выборочно включить/выключить перекодировку данных, полученных от клиента в зависимости от HTTP Method. Запрос типа HEAD рассматривается (как и в оригинальном Apache) как запрос типа GET. Все прочие методы (DELETE,CONNECT,OPTIONS,TRACE) не требуют перекодировки.
    CharsetRecodeMethodsOut GET POST PUT ALL NONE - делают аналогичное включение/ выключение перекодировки для потока сервер-клиент. Если для данного запроса перекодировка вывода выключена, то Content-Type: .. charset=, Expires, Vary не выдаются. Переменные CHARSET и SOURCE_CHARSET доступны скрипту даже при выключенной перекодировке.
    Я не объединил CharsetRecodeMethods* в одну директиву по тривиальной причине - допустим, мы имеем скрипт, который получает нетривиальные данные, но отдает пользователю "обычный" HTML (IMHO, обычное дело), в таком случае можно переложить часть нагрузки по перекодировке output (и установке корректных headers) со скрипта на сервер.
  1. Configuration и Configuration.tmpl сделаны идентичными. Иначе предложение от make: "скопируйте Configuration.tmpl в Configuration" приводит к конфузам

PL22.2, Apache 1.2.6, 26 Mar 1998, Alex Tutubalin
  1. apache-1.2.5 -> 1.2.6 changes merged. Apache-TEAM таки поправила багу, которую фиксил Russian Apache PL20.5, поэтому этот фикс удален.

PL22.2 05 Feb, 1998, Alex Tutubalin
  1. Добавлены переменные окружения CHARSET_SERVER_NAME (в форме www.domain:port), CHARSET_HTTP_METHOD (http:// или https://) и CHARSET_SERVER_PORT (просто число). Сделано в связи с тем, что стандартный SERVER_PORT содержит всегда 80 (кроме тех случаев, когда в директиве Port сказано иное но и тогда не зависит от VirtualHost), а в HTTP_HOST пишется то, что клиент написал в переменной Host, что тоже не всегда будет работать, а в скриптах иногда хочется иметь возможность с гарантией воссоздать URL по которому было обращение.
  2. Несколько изменено внутреннее представление таблиц с транслитерацией, что должно позволить упростить (и возможно - ускорить) работу с ними
  3. В функции send_fd_length (которая, собственно, и отправляет static htmls пользователю) случай, когда таблица перекодировки не является wide обрабатывается отдельно, что должно заметно ускорить процесс отсылки plain html и CGI (и прочих модулей, пользующихся send_fd*)

PL22.1 30 Jan 1998, Alex Tutubalin
  1. Исправлена неконсистентность rprintf/charset_vbprintf из-за которой rprintf не работал.
  2. Обработчик strip-meta-http теперь выдает тэги той же длины, которой они были бы в случае перекодировки translit (во всех остальных случаях длина не меняется).
  3. rputc для режима translit сильно переписан, что должно его ускорить.
  4. В режиме translit (Wide Tables) перекодируются HTTP-заголовки

PL22.0 25-26 Jan 1998, Alex Tutubalin
  1. Добавлена поддержка не-однобайтовых таблиц перекодировки. Выражается это в:
    • Директива CharsetDecl получила дополнительный необязательный параметр flags. Т.е. ее синтаксис CharsetDecl charset lang flags В качестве флага распознается пока только буква S (от Suppress), что означает подавить выдачу charset=... в Content-Type для этого Charset
    • Добавлена директива CharsetWideRecodeTable charset_from charset_to recode_table.tab Отличия от CharsetRecodeTable: обратная таблица не строится, правая часть в recode_table.tab воспринимается как строка (а не как число!)
    • в настоящее время такая перекодировка поддерживается только в направлении сервер->клиент, в обратную сторону перекодировки не производится
    • В обработчиках default_handler и strip-meta-http производится перерасчет Content-Length. Во всех остальных случаях Content-Length (даже если модуль его ставит) удаляется.
    • Перекодировка заголовков в translit пока не поддерживается

PL21.5, 18-24 Jan 1998, Alex Tutubalin
  1. CharsetAgent поправлен на тему Lynx (Lynx/ - koi8, Lynx2/OS/2 - ibm866)
  2. Поправлена недоделка при обработке CharsetSoftRedirect - в одном из мест имя протокола было жестко задано как http (может быть и https://).

PL21.4, 05 Jan 1998, Alex Tutubalin
  1. Внесены правки, необходимые для работы с Apache-SSL
  2. Lynx2/OS2 добавлен в bad-agent, как не понимающий charset=...
  3. Имя переменной sc_flags изменено на zz_sc_flags (HP UX workaround)
  4. Diffs apache_1_2_4 -> apache_1_2_5 merged

PL21.3, 01 Jan 1998, Alex Tutubalin
  1. Не обрабатываются (и не перекодируются) proxy requests
  2. Добавлена директива CharsetStrictURIMatch On|Off. Если она On, то выбор кодировки по префиксу URL осуществляется по таким правилам
    • При выбора по hostname - имя хоста должно быть encoding-name.some.domain или encoding-name (т.е. после совпадающей части должна стоять точка, либо совпадение должно быть полным)
    • при выборе по имени директории, URL должен начинаться с /encoding-name/, либо с /~user/encoding-name
    Положение по умолчанию - Off (совместимость !)

PL21.2, 27-29 Dec 1997, Alex Tutubalin
  1. Код, обрабатывающий выкусывание <META HTTP-EQUIV...> теперь обрабатывает тэги в которых HTTP-EQUIV="Content-Type" стоит в любом месте тега (т.е. <META Content="text/html" HTTP-EQUIV="Content-Type"> тоже будет корректно обработан). Спасибо am@f1.ru (Andrew Maltsev)
  2. Код, выдающий переменную SOURCE_CHARSET теперь не выдает core при обращении к директориям в которых нет index.html
  3. Сделан некоторый speedup функции convert_by_table. Согласно gprof, она стала занимать ~6% (вместо ~15-20 процентов!) процессорного времени. Хватило одного слова register. Естественно, на других архитектурах ускорение может быть и не таким заметным (я проверял на AMD-K6 и gcc-2.7.2). Весь прочий код Apache-RUS требует на свое выполнение сущие гроши, поэтому остальные оптимизации можно и не делать.
  4. Добавлена директива CharsetProcessType, разрешающая обработку MIME-типов, отличных от text/*. Например, CharsetProcessType image/gif разрешит перекодировку (и выдачу Expires, charset=... и так далее) GIF'ов, а CharsetProcessType application/ сделает то же самое с application/* Если параметр директивы заканчивается на /, то считается что специфицирован только MIME type (см пример с application/), если параметр заканчивается на любой другой символ, то таким образом специфицируется пара type/subtype
  5. Добавлена директива CharsetBrokenAccept, позволяющая описать комбинацию User-Agent + Accept-Charset, которую не следует принимать во внимание при обработке Accept-Charset. Примером такого "вредного" софта может служить Netscape 4.x - по умолчанию оно выдает Accept-Charset: iso-8859-1,*,utf-8. Т.е. если у вас описан CharsetDecl iso-8859-1, то владельцы Navigator 4.x никогда не увидят другого Charset. Использование директивы: CharsetBrokenAccept "browser-substring" "full_accept_string" например: CharsetBrokenAccept "Mozilla/4." "iso-8859-1,*,utf-8"
  6. Добавлена директива CharsetOverrideExpires. Если оно включено (On - умолчание) то даже если другие модули или CGI поставят заголовок Expires:, их пожелание будет проигнорировано - т.е. если mod_charset считает, что кэшировать данный документ не надо, то Expires будет установлено в 01 Jan 1970. Если выключено (CharsetOverrideExpires Off), то заголовки Expires от других модулей будут учитываться и не будут меняться если они уже есть. Советую использовать с осторожностью, иначе смотрящие ваш WWW рискуют никогда не увидеть своей кодировки :)

PL21.1, 21 Dec 1997, Alex Tutubalin
  1. Сервер ставит переменную среды SOURCE_CHARSET, соответствующую той кодировке, в которой он планирует получать данные
  2. Поправлен mod_dir.c (как я не хотел этого делать). Теперь при обращении к http://server:port/directory выдается Redirect на http://server:port/directory/ (т.е. сохраняется номер порта к которому было обращение). Номер порта берется тот, к которому было реальное обращение. Раньше сервер не указывал номер порта если пара host:port не была описана явно директивой <VirtualHost>
  3. Добавлены директивы CharsetSoftRedirect, CharsetSoftRedirectTemp, CharsetSoftRedirectPermanent. По функциональности это почти аналоги директив Redirect/RedirectTemp/RedirectPermanent из mod_alias (и весь код взят из mod_alias почти без изменений). Синтаксис: CharsetSoftRedirect /old.html /path/to/new.html При обращении к http://server:port/old.html будет выдан редирект на http://server:port/path/to/new.html
    "Дистрибутивные" Redirect/RedirectTemp/... не устраивали по той причине, что там нужно было писать полный URI (т.е. с портом), что неприемлемо при использовании "перекодировки по портам".

PL21.0, 10 Nov 1997, Alex Tutubalin
  1. Добавлена директива CharsetRecodeFilenames (On|Off). Рекомендуемое положение - Off, умолчание - On (совместимость). Без оной директивы сервер производит перекодировку имен файлов в запросе, что было бы неплохо, но проверка прав доступа производится по неперекодированному имени и так просто это не лечится. Спасибо "Khimenko Victor" <khim@sch57.msk.ru> и всем-всем-всем за полезное обсуждение. Подробности смотри в документации.

PL20.9, 26 Oct 1997, Alex Tutubalin
  1. Пофиксена проблема с rprintf, который не работал при компиляции без -funsigned-char. Спасибо Serge Werner <eff@hq.icomm.ru> и всем остальным, кто об этом писал.
  2. В дистрибутивном конфиге выключена CharsetMatchLanguage Andrey Chernov (ache@nagual.ru) убедил меня что так лучше :)

PL20.8, 06 Oct 1997, Alex Tutubalin
  1. В связи с проблемами в SunOS 4.1.4, вызов realloc() в http_protocol.c: copy_and_recode заменен на комбинацию free+malloc. При изменениях размера временного буфера для перекодировки теперь запрашивается на 256 байт больше - в надежде на то, что free+malloc придется делать пореже. Спасибо <ilya@www.rm.ru> за рассказ о проблемах SunOS.
  2. Код, вырезающий <META вырезает теперь не все HTTP-EQUIV, а только c HTTP-EQUIV="Content-Type". Внимание. Если длина тэга больше 1024 байтов, то он не обрабатывается (не вырезается). Спасибо Vadim Ostranitsyn <vadim@alpha.tsu.tomsk.su>.
  3. Убран флаг -g из CFLAGS, который попал туда случайно :). Заменен на -O.

PL20.7
  1. Поправлена неприятная ошибка, которая не давала работать методу POST в случае, когда Charset Module был несконфигурирован. Спасибо Sergey Vovk <vsv@macomnet.ru> и Konstantin Morshnev <moko@design.ru>. Код внимательно просмотрен на предмет подобных мест
  2. Добавлен '2 percent performance improvement on moderately large files' by Dmitry Khrustalev <dima@xyzzy.machaon.ru>.

PL20.6
  1. В функции, читающей таблицы перекодировки формат sscanf заменен с %x на 0x%x (для 16ричных данных). Сделано это в связи с тем, что sscanf в Solaris 2.4 (насколько он патченый - не знаю) со старым форматом не работают, а с новым должны работать все. Спасибо Pavel A. Marakazov <pmarakaz@impact.net.kiae.su> за bugreport.
  2. Пофиксена следущая проблема - если объем данных, получаемых по POST превышает HUGE_STRING_LEN (8192 байта по умолчанию), то шестнадцатеричные (%aa) символы, пересекающие границы этих блоков, могут остаться непереко- дированными. Исправлено. Спасибо Igor Sysoev <igor@nitek.ru>

PL20.5
  1. Diffs 1.2.1->1.2.4 merged
  2. добавлен 'quick fix' для такой проблемы: Если имеются 'hostname-based' virtualhosts (работающие по заголовку Host: ) и используются номера портов, отличные от 80 (точнее, от заданных директивой Port), то при обращении к (например) http://virtual:8001 будет отдан документ http://real:8001. Это связано с тем, что
    • Netscape Navigator ставит заголовок Host: virtual:8001
    • если порт, указанный в заголовке Host: не совпадает с SERVER_PORT (i.e. директивой Port), то заголовок Host: просто не анализируется.
    Спасибо <slava@ineco.ryazan.su>
    Это полноценный баг Apache-1.2.x, об нем донесено Apache-Team (через submit bug), но временный фикс в Russian Apache я таки включил.

PL20.4
  1. Если ETag включает имя кодировки, то вместо пробела между именем кодировки и остальным ETag ставится '-' вместо пробела.
  2. Изменена обработка Directory Indexes. Теперь перекодировка и прочие действия для Directory Index осуществляются по реально отдаваемому имени файла, а не по первоначальному URL. Это может иметь значение, если исходная (on-disk) кодировка для директории в целом (заданная, например, директивой CharsetSourceEnc) и для отдаваемого файла не совпадают. Например, если все файлы в директории имеют charset=windows-1251, а файл индекса - koi8-r (т.е. конфигурация примерно такая: DirectoryIndex index.html-k8 AddType text/html html-k8 CharsetByExtension koi8-r html-k8 CharsetSourceEnc windows-1251 ), то при обращении к /somedir/ и к /somedir/index.html-k8 результат будет одинаков. Спасибо am@f1.ru (Andrew Maltsev) ВНИМАНИЕ! Директива CharsetSourceEnc действует и для Directory listing (т.е. для табличек с именами файлов). Я долго думал - правильно это или нет, а потом решил, что для URL внутри HTML-файлов (<A HREF="русский.файл.html") и для URL в Directory Listing поведение должно быть одинаковым.
  3. В дистрибутив положен полный набор таблиц для пяти кодировок с поддержкой буквы 'йо'. Спасибо Dmitry M. Klimoff <dmk@kosnet.ru>.

PL20.3
  1. Убраны несовместимости с "остальным" apache - конструкция inline static и alloca. Спасибо Sergey Vovk <vsv@macomnet.ru> Имеющим проблемы со сборкой на каких-либо платформах просьба обращаться.
  2. Пофиксен случай, когда документ имеет default content-type (т.е. без расширения, либо расширение не описано в mime.types/AddType). Спасибо Stanislav Sinyagin <stas@isf.ru> Замечание. charset=... будет выдаваться для такого документа только если CharsetMactchLanguage Off

PL20.2, 21 Jul 1997, Alex Tutubalin
  1. CharsetByPort не только задекларирована, но и работает :). Оказывается, то что пишет сервер в переменной SERVER_PORT является бредом и относится только к директиве Port. А никак не к порту, на который пришло реальное соединение. Интересно, как это у меня работало ? Спасибо Stanislav Sinyagin <stas@isf.ru>
  2. Имевшиеся дубликаты таблиц перекодировки (koi-win и koi8-win) удалены. Спасибо Oleg Bartunov (oleg@sai.msu.su)

PL20.1, 20 Jul 1997, Alex Tutubalin
  1. Исправлена ошибка в обработке Accept-Charset, приводившая к core в том случае, когда полученный от клиента Accept-Charset был известен серверу, но не был перечислен в директиве CharsetPriority Спасибо Alexey Sheinkin <als@legion.ru>
  2. Код, ставящий заголовок Vary теперь не ставит его, если тип ответа отличен от text/*. Для этого пришлось вынести этот код из mod_charset в http_protocol.c Спасибо Alexey Sheinkin <als@legion.ru>
  3. Добавлены директива конфигурации CharsetByPort charset-name portnumber В директиве CharsetSelectionOrder появилась token 'Portnumber', Значение CharsetSelectionOrder по-умолчанию - Portnumber Hostname Dirprefix Useragent Все это вместе реализует выбор кодировки "по порту" без описания всего хозяйства в директиве <VirtualHost>. Удобно в том случае, когда на одной машине по разным IP-адресам живут _разные_ (по content) сервера, а выбор кодировки производится по номеру порта. Скажем, для 4 виртуальных серверов и 4-х кодировок вместо 16-ти директив <VirtualHost> можно написать что-то вроде такого
         Listen 80
         Listen 8001
         Listen 8002
         Listen 8003
         CharsetByPort koi8-r 8001    
         CharsetByPort windows-1251 8002
         CharsetByPort iso-8859-5 8003
         
    А в директивах <VirtualHost> не писать ничего про перекодировки.

PL20.0, 20 Jul 1997, Alex Tutubalin
  1. Добавлены директивы конфигурации CharsetTurnOff Off/On (умолчание - Off) - выключить весь charset-processing module. Может использоваться, когда перекодировка совсем не нужна (скажем, директория содержит текст на японском) CharsetRecodeHeaders Off/On (умолчание - Off) - включить перекодировку заголовков ответа (Location и т.п.). По-умолчанию это выключено для совместимости со старыми (PL12..PL19a) версиями т.к. включение этой перекодировки приводит к несовместимости со старыми версиями если при переходе по Location: происходит смена кодировки. Спасибо Oleg Bartunov (oleg@sai.msu.su) за пример такой несовместимости.
  2. Внесены доработки в код, выдающий '304 Not Modified'. Not Modified в ответ на If-Modified-Since: _не_ выдается сейчас в том случае, если выдаваемый документ имел бы заголовок Expires, поставленый by mod_charset. Эти случаи таковы: запрос должен быть HTTP/1.0 и а) выбор кодировки производился по User-Agent б) либо выбор кодировки был по Accept-Charset и выбранная кодировка не совпадает с той, которая была бы выбрана по Hostprefix/Dirprefix

PL19.3
  1. Обработчик в mod_charset окончательно уехал в разряд fixups (он там уже бывал). Причиной для этого стало нежелание править mod_negotiations (который ставит вторую копию заголовка Vary: невзирая на наличие этого заголовка в момент обработки). Впрочем ( если рассуждать чисто логически), место этому обработчику именно там - уже после всех прочих обработок URL.
  2. Исправлена имеющаяся в Apache-1.2.1 ошибка (в send_http_header), которая приводит к двойной выдаче языка в Content-Language (Content-Language: ru, ru) в случае, когда была language negotiation
  3. Исправлена ошибка в перекодировщике заголовков (заголовка Location:) - если никакого charset не было выбрано, то все падало в core. Спасибо Oleg Bartunov (oleg@sai.msu.su)
  4. Теперь перекодируются все заголовки. Довольно своеобразным способом - - если символ там был в виде %AA, то он в такой вид и перекодируется (%BB), если символ был "символом" (например, '+', '?' или 'ы'), то он тоже будет перекодирован в соответствии с текущей таблицей. Таким образом, вся ответственность за представление символов в заголовках (i.e. %xx или символ, пробел или '+' и т.п.) лежит на том, кто эти заголовки производит. Никакой самодеятельности.
  5. Приведено в соответствие содержимое дистрибутивных конфигурационных файлов. Надеюсь что ничего не забыл. В httpd.conf-dist все директивы mod_charset убраны в "скобки" <IfModule mod_charset.c>...</IfModule> В srm.conf- написан комментарий про то, что ScriptAlias не живет с MultiViews и про то, как это обойти.
  6. В дистрибутив добавлены все имеющиеся в распоряжении автора таблицы перекодировки

PL19.2
  1. Код, вырезавший <META HTTP_EQUIV...> вставлял \0 от строки meta http was here. Исправлено. Спасибо, только вот не помню кому - письмо поубивал.
  2. Запросы, обрабатываемые через Action (и все прочие, работающие через internal_redirect) теперь перекодируются только один раз (а не два). Как следствие, сохраняются русские URL, а выбор кодировки происходит по первоначальному URL, а не по скрипту, заданному в Action. Спасибо всем, кто мне об этой баге писал.
  3. Производится перекодировка заголовка Location в HTTP-Response. Теперь Location: some.cgi?русский+текст дойдет до пользователя в правильном виде.
  4. В httpd.conf-dist ISO_8859:5 заменен на ISO-8859-5 повсеместно, а не частично. Спасибо "Khimenko Victor" <khim@sch57.msk.ru>
  5. Чуть-чуть подправлена функция, перекодирующая заголовки от клиента. Спасибо Artem Podstreshny <art@radio-msu.net>

PL19a
  1. Убрана недоделка, приводившая к выдаче Expires: для типов, отличных от text/*
  2. При выдаче Expires: в обязательном порядке выдается Last-Modified (в случае, когда Last-Modified не имеет смысла - CGI/SHTML - выдается текущее время сервера).
  3. Если в текущих для данного документа установках CharsetSelectionOrder нет выбора User-Agent, то Expires/Vary: user-agent не выдается.
  4. Исправлена ошибка, приводившая к мусору в содержимом cp_flags (правда в PL18 использовался только один бит из него, который всегда устанавливался корректно)
  5. Убрана "ругань" в логи в случае, когда для документа не удается найти нужный charset. Сделано это по той причине, что администратор сервера имеет право не настраивать этот модуль и в этом случае все должно работать так, будто модуля просто нет.
  6. :) Выражение в assert в http_bprintf.c сделано более ANSI-совместимым. Хотя это ни на что и не влияет. gcc 2.7.2.2 с опцией -Wall теперь не ругается (FreeBSD 3.0-beta) - а значит цель достигнута.



[Russian Apache] [Как это работает] [Рекомендации] [Где взять] [Как установить] [Как настроить] [Статус и поддержка]
[Краткий обзор] [FAQ] [Список рассылки] [Благодарности] [Поиск] [Russian Apache Logo]
Cyrillic encoding: [ auto ] [ koi8-r ] [ windows ] [ cp-866 ] [ iso ]

"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-2001 Alex Tutubalin.
Design (C) 1998 Max Smolev.
TopList