Я сегодня искал трубы, но, учитывая мои ограниченные знания mod_rewrite и регулярных выражений, я борюсь.
Я пытаюсь переписать домен 1 (включая поддомены) на домен 2 (включая поддомены) и реализовать как 301. Домен 2 является основным доменом, домен 1 просто (на данный момент) настроен рядом и действительно просто там, потому что «это есть» (ожидается более эффективное использование, я подумал, что использую его, чтобы кое-что изучить).
Домен 2 настроен как подстановочный знак, и на нем размещаются микросайты, которые отображаются через субдомен -> внутренняя перезапись вложенной папки. (с радостью отправлю код для этого по запросу, это не сложно, но мне потребовалось время, чтобы заставить его работать без бесконечных перезаписей по какой-то странной причине). Домен 1 (временный домен) вообще не настроен, но только потому, что я сталкиваюсь с несколькими вариантами (реализованный DirectAdmin «псевдоним» или «указатель», либо добавленный как отдельный домен и настроенный как подстановочный знак). Если кто-то перейдет в домен 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?)
... Однако здесь я застрял. Каким будет самый изящный способ переписать, чтобы переносить любые переменные в новое доменное имя - и не терять при этом никаких поддоменов?
Есть ли причина, по которой Перенаправить не будет работать, в конфиге для domain1:
Redirect permanent / http://domain2.com/
Redirect
перенаправляет все, что находится под LHS, на RHS, сохраняя ту же структуру каталогов.
В качестве альтернативы, еще более простое решение - просто добавить ServerAlias domain2
в конфигурации для домена 1, хотя он не отправляет перенаправления, просто заставляет сервер отвечать на запросы для домена 2 так же, как и для домена 1.
Я думаю, вам нужно что-то вроде этого:
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]
Попробуйте что-нибудь вроде (непроверено):
RewriteMatch 301 http://(.*)domain1.com(.*) http://$1domain2.com$2