mod_rewrite, чтобы сохранить поддомен в URL - PullRequest
0 голосов
/ 02 апреля 2012

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

http://fr.domain.com/content

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

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

Это возможно? Ура!

Ответы [ 3 ]

5 голосов
/ 06 апреля 2012

Возможно, вам придется проверить 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]

РЕДАКТИРОВАТЬ: удалено НЕ в 3-м условии

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

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

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

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

2 голосов
/ 13 апреля 2012

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

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

2 голосов
/ 11 апреля 2012

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

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

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

...