Привет,
вот тут проблема, которую я не могу понять как правильно решить.
Если у нас идет обращение к директории (http://server/dir/)
то в зависимости от наличия там directoryindex, показывается
либо содержимое директории, вместе со всякими README, либо
index.html/shtml/cgi
И тут возникает дурацкая проблема - mod_dir делает несколько
(под)запросов к директории:
- сначала к /dir/
- потом (возможно - несколько) subrequest к /dir/index.NNN
- если index.NNN найден, то на него делается redirect
- если не найден, то управление отдается mod_autoindex,
который красиво форматирует листинг директории.
Возникает (опять!) проблема многочисленных перекодировок URL/QUERY_STRING
и подобного. Т.е. в настоящий момент при наличии index.cgi и обращении
http://www.foo.ru/?arg=по+русски до index.cgi аргументы дойдут _дважды)
перекодированными.
Варианты решения проблемы (с недостатками):
1) сохранять где-то оригинальный query-string и перекодировать каждый
раз его. Проблемы - если аргументы меняются через mod_rewrite, то
узнать об этом в mod_charset не представляется возможным.
2) Не перекодировать запросы к каталогам никогда. Недостатки -
всякие readme и русские имена файлов будут показаны в кодировке сервера
3) Перекодировать запросы к каталогам всегда. Двойная перекодировка
запросов вида http://foo.org/?задница
4) Предоставить администратору возможность выбора между 2) и 3)
директивой вида CharsetRecodeDirListings On/Off
Умолчание будет, наверное, On для совместимости с прошлыми конфигами
Как мне кажется, 4-й вариант предпочтителен
И еще. Я хочу выкинуть старые директивы типа CharsetTurnOff. Как сделать
правильнее - ругаться в ErrorLog и работать, или ругаться на них при старте
и не работать, предлагая заменить на новые названия ?
Alex
"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.