2012-04-02 5 views
0

У меня есть это приложение, которое я хочу поддерживать несколькими языками. Я думал, что самый простой способ будет использовать поддомены акиmod_rewrite, чтобы сохранить поддомен в URL

http://fr.domain.com/content 

Теперь я создал поддомен на моем сервере, указывая на главный корень и, действительно, выше URL доступен.
Проблема теперь - все мои ссылки, которые являются абсолютными.
Есть ли способ с mod_rewrite уловить язык из URL-адреса и переписать ссылки на один и тот же URL-адрес поддомена?

Так что, если мы на http://fr.domain.com/content и нажмите на ссылку http://domain.com/link Я хочу страницу, чтобы загрузить в http://fr.domain.com/link

Возможно ли это? Приветствия!

ответ

5

Возможно, вам потребуется проверить HTTP_REFERER, если вы хотите сделать это через apache. Это может быть хорошо, чтобы начать обновление сайта, так что ссылки динамичны в будущем ...

Что-то подобное (я не могу проверить это в настоящее время):

RewriteCond %{HTTP_REFERER} !^$ 
RewriteCond %{HTTP_HOST} !^[a-z]{2}\.host\.com$ [NC] 
RewriteCond %{HTTP_REFERER} ^http://([a-z]{2})\.host.com/.*$ [NC] 
RewriteRule (.*) http://%1.host.com/$1 [R,L,QSA] 

EDIT: удалили НЕ в 3-м условии

Возможно, вам придется проверить некоторые другие условия, но проверьте все, чтобы выяснить, что работает. Кроме того, если вы выполняете другие переадресации, вам нужен способ поддерживать исходный реферер. В некотором смысле, даже со ссылками так, как они есть, это может быть проще сделать с помощью более динамичных средств с помощью php (через сеанс) или что-то еще.

Я использовал эти:

http://www.askapache.com/htaccess/mod_rewrite-variables-cheatsheet.html#HTTP_REFERER

http://www.askapache.com/htaccess/modrewrite-tips-tricks.html

+1

Я согласен с тем, что вы, вероятно, захотите обновить сайт, чтобы изменить ссылки до их отправки в браузер.Решение выше будет работать, если вы имеете дело только с GET, но если у вас есть абсолютные ссылки для запросов POST, mod_rewrite не является подходящим инструментом для решения этой проблемы. – Jamey

+0

Правда. Возможно, это должен быть флаг «P» вместо флага «L» для сохранения данных сообщения. (если включен прокси-модуль) – craniumonempty

+0

О, мой .. Я полностью забыл о своем вопросе. Извините за то, что craniumonempty. Я вижу, что вы получили только половину щедрости. Прошу прощения. Ваше решение отлично работает. Только поймать, я хотел бы иметь английский как язык по умолчанию. У меня есть языковой переключатель со ссылками, такими как 'href =" it.domain.com "и т. Д. У английского коммутатора есть нормальный' href = "domain.com" и, конечно, когда мы, например, находимся на французской странице 'fr .domain.com' референт по-прежнему сохраняет французский суб. Есть ли решение для этого? – FFish

2

Вы, наверное, нужна какая-то на лету HTML переписывания инструмент, как mod_proxy_html. Этот инструмент был специально разработан для переписывания ссылок на страницах с другой стороны обратного прокси-сервера, но его можно было бы использовать для общего переписывания ссылок. В частности, документы говорят:

Обычно mod_proxy_html отказывается запускать, если не в прокси, или когда содержимое не является HTML. Это можно переопределить (на свой страх и риск), установив переменную среды PROXY_HTML_FORCE (например, с помощью директивы SetEnv).

Модуль вполне настраиваемый и поддерживает условное переписывание и регулярные выражения, поэтому с некоторой настройкой он должен делать то, что вы хотите.

2

Итак, вы говорите, что на вашем сайте есть ссылки, такие как <a href="http://domain.com/link">, а не только <a href="/link"> ??? Есть ли причина, по которой ваши ссылки закодированы так?

Будете ли вы счастливы выбивать текстовый редактор и искать/заменять эти hrefs вместо того, чтобы делать что-то типичное или чрезмерно сложное с переписыванием URL?

+0

Действительно я не могу, потому что это то, как CMS пишет ссылку .. – FFish

+0

Какая CMS вы используете? Если это что-то с открытым исходным кодом, проще было бы модифицировать/исправить программное обеспечение CMS для написания правильных URL-адресов. –

Смежные вопросы