Как я могу использовать мод rewrite для перенаправления пути к папке на поддомен, но без перенаправления браузера?

У меня есть файл, который я хочу перенаправить на субдомен с помощью mod_rewrite. Например, я хотел бы перенаправить запрос для http://www.mydomain.com/xyz на поддомен xyz.example.com

Однако я не хочу отправлять перенаправление в браузер (поэтому он не знает, что страница отличается).

КСТАТИ. xyz — это запись CNAME, указывающая на www.otherdomain.com.

Другой пример, просто для пояснения. Если в браузер вводится http://www.mydomain.com/xyz/something, я хочу, чтобы Apache возвращал содержимое http://xyz.mydomain.com/something


person Community    schedule 28.02.2009    source источник


Ответы (2)


Я ДУМАЮ, это сделает то, что вы хотите:

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*?)/(.*?)$ http://$1.mydomain.com/$2

В нынешнем виде он будет перенаправлять КАЖДЫЙ запрос, который отправляется в подпапку, поэтому, если вы ссылаетесь на изображения или css, которые находятся в подпапке, он также перепишет их, если вы хотите перечислить только определенные вещи, которые вы могли бы использовать это

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(blog|store|other)/(.*?)$ http://$1.mydomain.com/$2

Это перенаправит только mydomain.com/blog/mydomain.com/store/ и mydomain.com/other/

person UnkwnTech    schedule 28.02.2009
comment
Вам также нужен флаг прокси [P] в конце RewriteRule? - person jcrossley3; 28.02.2009
comment
Разве вам не нужно начинать с ^/ ? - person gahooa; 28.02.2009
comment
@jcrossley3 - я не уверен @gahooa - ^ да, но не / - person UnkwnTech; 28.02.2009
comment
Привет Unkwntech, спасибо за помощь. что-то длинный PHP-запрос. Я использовал первый предложенный вами код, и он работает наполовину. Он правильно загружает содержимое субдомена xyz, но в адресной строке отображается: xyz.mydomain.com/something (вместо www.mydomain.com/xyz/something), чтобы продолжить - person ; 01.03.2009
comment
и если я снова введу ту же адресную строку: www.mydomain.com/xyz/something (и нажму Enter), то он снова загрузится правильно, а в адресной строке останется (правильно): www.mydomain.com/xyz/ что-то После того, как я нажму кнопку обновления, оно загружается нормально, но адресная строка меняется на xyz.mydomain.com/something - person ; 01.03.2009
comment
Примечания. 1. www.otherdomain.com находится на другом сервере 2. [P] в конце не работает (либо искаженное отображение, либо ошибка прокси) 3. ^/ в начале не работает - person ; 01.03.2009
comment
Сообщение для Гамбо. Спасибо за ваш ответ. Попробовал ваш второй код (с опциями +FollowSymLinks), и он выдает ошибку, страница не найдена. Код предназначен для файла .htaccess в корневом каталоге. - person ; 01.03.2009

Если оба домена находятся на одном компьютере и доступны через файловую систему, вам следует пойти по этому пути. Например:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^([^/]+)/(.*) /absolute/path/to/subdomains/$1/$2

Если это не так, вам понадобится прокси:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^([^/]+)/(.*) http://$1.example.com/$2 [P]

Эти примеры предназначены для файла .htaccess. Если вы хотите использовать их в httpd.conf, добавьте к шаблонам RewriteRule префикс /.

person Gumbo    schedule 28.02.2009
comment
Всегда исправлять доменное имя при применении этого. Это показано в примере, но я хотел указать, что читатели должны убедиться, что НЕ предоставляют доступ к каким-либо другим доменам через прокси; это было сделано путем исключения / в качестве символа в регулярном выражении и предоставления прокси-доступа только к субдоменам. - person Energiequant; 28.02.2009