Расширенное перенаправление поддоменов HTACCESS (с foo.dom2.com на foo.dom1.com) - PullRequest
4 голосов
/ 08 ноября 2011

У меня есть domain1.tld и domain2.tld.Domain1.tld является основным именем домена, а domain2.tld является просто псевдонимом.У меня domain2.tld успешно перенаправлен на domain1.tld через HTACCESS, но я хочу, чтобы все субдомены на domain2.tld также перенаправили на свой параллельный субдомен на domain1.tld, динамически.

Например: bla.domain2.tld следует перенаправить на bla.domain1.tld, а foo.domain2.tld следует перенаправить на foo.domain1.tld.

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

Ха-ха, я думаю, что я пишу сценарий "все в одном", включающий субдомены, псевдоним перенаправления домена в HTACCESS.

Информация:

  • Я нахожусь на Bluehost, без доступа к VHOSTS, HTTPD.CONF и т. Д.

  • У меня есть сеть поддоменов Wordpress (мультисайт).Это означает, что мои поддоменов domain1.tld являются виртуальными.Wordpress справляется с этим, поэтому, пока я могу полностью перенаправить foo.domain2.tld на foo.domain1.tld, Wordpress должен быть неискушенным и работать правильно.Правильно?

  • В Wordpress есть плагин «Профессиональное сопоставление доменов».Это позволяет сайтам в моей сети иметь собственные доменные имена.Но рассматриваемая проблема касается только сайтов в моей сети, которые не имеют свои собственные доменные имена и, следовательно, используют субдомены в моем основном домене (domain1.tld).

  • Таким образом, у меня есть подстановочный субдомен для domain1.tld.

  • Но у меня также есть подстановочный субдомен для domain2.tld, просто чтобы убедиться, что все субдомены наdomain2.tld собираются на тот же IP-адрес, что и domain1.tld: я думаю, что тогда эти поддомены должны быть доступны для чтения HTACCESS в моей корневой папке.

Это правило вмой HTACCESS, который я ожидаю сделать следующим образом:

RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+\.)?domain2\.com$ [NC]
RewriteRule ^(www\.)?([a-z0-9-]+\.)?(.*) http\:\/\/%2domain1\.com\/ [L]

Но это не работает.Чего мне не хватает?

Я также пытался использовать переменную окружения, например:

RewriteCond %{HTTP_HOST} ^(www\.)?[E=subdm:([a-z0-9-]+\.)]?domain2\.com [NC]
RewriteRule ^(.*) http\:\/\/%{ENV:subdm}domain1\.com\/ [L]

... но это просто равнины, ломающие оба домена.: D

Я относительно опытен с регулярными выражениями, поэтому насколько комфортно я работаю с HTACCESS, но на самом деле я совсем новичок в мире HTACCESS.Мне нужна другая пара глаз!

↓ ОБНОВЛЕНИЕ (2011-11-08 9:33 EST) ↓

Я попробовал первое решение, предложенное Джоном Линем, и мне пришлось немного его отредактировать.Первоначально он не обрабатывал domain2.com без субдомена, пока я не поместил точку во вторую пару скобок совпадения и следовал за парой со знаком вопроса.

Как вы можете видеть ниже, я пошел вперед ипредоставил все содержимое моего HTACCESS, на случай, если вы обнаружите, что что-то конфликтует.

В настоящее время правильно перенаправляется с помощью рекомендуемого RewriteRule: www.domain2.com, domain2.com и domain2.com/foo В настоящее время НЕТперенаправление с предложенным RewriteRule: foo.domain2.com

# Use PHP5 Single php.ini as default
AddHandler application/x-httpd-php5s .php

Options +SymLinksIfOwnerMatch
RewriteEngine on

RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+\.)?domain2\.com$ [NC]
RewriteRule ^(.*)$ http\:\/\/%2domain1\.com\/$1 [L,R]

# BEGIN WordPress
RewriteBase /
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule . index.php [L]
# END WordPress

1 Ответ

3 голосов
/ 08 ноября 2011

Вы на правильном пути с% {HTTP_HOST}, но вам нужно использовать обратные ссылки (% 1,% 2 и т. Д.) Для доступа к совпадению с ним.Вы хотите сделать что-то вроде этого:

RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.domain2\.com$ [NC]
RewriteRule ^(.*)$ http://%2.domain1.com/$1  [L,R]

Обратите внимание, что если вы попытаетесь получить доступ: http://www.sub.domain2.com/foo, он перенаправит вас на http://sub.domain1.com/foo, "www."оригинального запроса больше нет.Если вы хотите www, измените правило на:

RewriteRule ^(.*)$ http://%1%2.domain1.com/$1  [L,R]
...