The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Apache, mod_rewrite"
Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Модули apache)
Изначальное сообщение [ Отслеживать ]

"Apache, mod_rewrite"  +/
Сообщение от Reaper (ok) on 01-Сен-10, 01:45 
Помогите настроить 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.

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Apache, mod_rewrite"  +/
Сообщение от Reaper (ok) on 01-Сен-10, 02:11 
add: в строке 14 лога mod_rewrite сработало условие провери языка браузера. Плюс, не написал содержимое .htaccess в языковых директориях (/en/|/fr/|/de/), вот оно:

RewriteEngine Off

Перенос части подменяющей mime-тип в .htaccess в языковых директориях ничего не даёт, там всё заканчивается на строке 20 лога в этом случае.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Apache, mod_rewrite"  +/
Сообщение от Reaper (ok) on 03-Сен-10, 18:32 
up
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру