301 перенаправление второго домена на первый через htaccess, mod_rewrite с сохранением поддоменов — есть какие-нибудь советы?

301 перенаправление второго домена на первый через htaccess, mod_rewrite с сохранением поддоменов — есть какие-нибудь советы?

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

Я пытаюсь добиться перезаписи домена 1 (включая поддомены) в домен 2 (включая поддомены) и реализации его как 301. Домен 2 является основным доменом, домен 1 просто (на данный момент) настроен рядом и существует просто потому, что «он есть» (лучшее применение еще не придумано, но я подумал, что воспользуюсь им, чтобы узнать что-то новое за это время).

Домен 2 настроен как wildcard и размещает микросайты, которые отображаются через внутреннюю перезапись поддомена -> подпапки. (с радостью выложу код для этого по запросу, это несложно, но мне потребовалось некоторое время, чтобы заставить его работать без бесконечных перезаписей по какой-то странной причине). Домен 1 (временный домен) вообще не настроен, но только потому, что я сталкиваюсь с несколькими вариантами (реализованным DirectAdmin «псевдонимом» или «указателем», или добавленным как отдельный домен и настроенным как wildcard). Если кто-то переходит в домен 1 (домен пересылки), должно произойти следующее:

http://sub.domain1.tld -> http://sub.domain2.tld
http://sub.domain1.tld/content.php -> http://sub.domain2.tld/content.php
http://domain1.tld -> http://domain2.tld
http://domain2.tld

Меня беспокоит то, что все решения, доступные в Интернете, либо сопоставляют поддомены с каталогами, либо закодированы только для обработки запросов через http://domain1.tld/. Один из моих старых htaccess, для перенаправления .co.uk на .com, содержит зачатки того, куда я хочу пойти:

RewriteCond %{HTTP_HOST} ^(www\.)?([^\.]+)\.foo\.com [NC] 
RewriteRule ^(.*)$ http://foo.co.uk/$1 [R=301,L]

Я понимаю, что это $1обозначает все после домена, как соответствующее шаблону ^(.*)$, и %2будет поддоменом (поэтому я предполагаю, что %1это было бы «www.», если бы оно присутствовало в http_referer, или в противном случае это было бы null?)

...Однако, вот тут я и застрял. Какой был бы самый аккуратный способ переписывания, чтобы перенести все переменные на новое доменное имя — и не потерять при этом поддомены?

решение1

Есть ли причина, по которойПеренаправитьне будет работать, в конфигурации для домена1:

Redirect permanent / http://domain2.com/

Redirectперенаправляет все содержимое LHS в RHS, сохраняя ту же структуру каталогов.

Альтернативным решением является даже более простое добавление ServerAlias domain2конфигурации для domain1, хотя это не отправляет перенаправления, а просто заставляет сервер отвечать на запросы для domain2 так же, как и для domain1.

решение2

Попробуйте что-нибудь вроде этого (не проверено):

RewriteMatch 301 http://(.*)domain1.com(.*) http://$1domain2.com$2

решение3

Я думаю, вам нужно что-то вроде этого:

RewriteCond %{HTTP_HOST} ^((www\.)?[^\.]+)\.foo\.com [NC]
RewriteRule ^(.*)$ http://%1.foo.co.uk/$1 [R=301,L]

Это сохранит %1 (часть поддомена foo.com, включая www, если он есть) и поместит его в правую часть RewriteRule. Имейте в виду, что это всего лишь строки, пока mod_rewriteмы их искажаем, поэтому вы можете делать с ними что угодно.

Если необязательная часть www вызывает у вас проблемы, разделите ее на два RewriteCondоператора:

RewriteCond %{HTTP_HOST} ^(www\.[^\.]+)\.foo\.com [NC] [OR]
RewriteCond %{HTTP_HOST} ^([^\.]+)\.foo\.com [NC]
RewriteRule ^(.*)$ http://%1.foo.co.uk/$1 [R=301,L]

Связанный контент