Назад | Перейти на главную страницу

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

Я сегодня искал трубы, но, учитывая мои ограниченные знания 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