Помогите настроить mod_rewrite для подмены типа документа в определённых случаях.Преамбула.
На сайте используется xhtml и содержимое хранится в файлах .xhtml, также есть в наличии многоязыковая поддержка основанная на использовании mod_rewrite. mod_rewrite был использован для последнего из следующих соображений:
хотелось:
а) отсутствия в урлах языка: /en/
б) отсутствия в урлах параметра с языком: ?lang=en
в) неиспользования серверных скриптов
Некоторые особенности:
.xhtml имеет mime-тип application/xhtml+xml, IE 6,7,8 не понимают этот mime-тип, поэтому если тип документа xhtml не загоняют внутрь .html файлов, используют mod_rewrite для подмены mime-типа для браузеров не умеющих application/html+xml.
Код подмены (работающий), .htaccess:
RewriteCond %{REQUEST_URI} \.xhtml$
RewriteCond %{HTTP_USER_AGENT} MSIE [OR]
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml\s*;\s*q=0\.?0*(\s|,|$)
RewriteRule .* - [T=text/html]
теперь правила для многоязыковой поддержки, .htaccess:
RewriteBase /
# это переключатель локали. устанавливаем куки,
# обнуляем lang параметр во избежание зацикливания
RewriteCond %{QUERY_STRING} lang=(en|fr|de)
RewriteRule .* $0? [CO=lang:%1:%{HTTP_HOST},R,L]
# если куки установлен идём в локальную субдиректорию
RewriteCond %{HTTP_COOKIE} lang=(de|fr|en)
RewriteRule .* %1/$0 [L]
# если нет - смотрим язык пользователя
RewriteCond %{HTTP:Accept-Language} ^(en|fr|de).*$
RewriteRule .* %1/$0 [L]
# наконец если ничего не сработало -
# устанавливаем дефолтную локаль
RewriteRule .* fr/$0 [L]
# иначе при редиректе новая локаль сразу не видна
ExpiresActive On
ExpiresDefault "access plus 0 seconds"
По отдельности оно всё работает, а если вместе, то перестаёт работать подмена типа документа. Полный .htaccess: http://pastebin.com/3MpgfCne
Лог mod_rewrite при заходе IE6 на epicats.com/index.xhtml : http://pastebin.com/U7GZxyH3 - как видно из лога последняя строка 21, после неё IE выкидывает диалог сохранения непонятного ему документа, т.е. получает не text/html.