Перенаправить несколько поддоменов на другое доменное имя - PullRequest
1 голос
/ 23 февраля 2012

Есть вопрос об использовании mod_rewrite для перенаправления определенных поддоменов на использование другого домена.Я ищу самый короткий способ сделать это без необходимости создавать отдельное правило перезаписи для каждого из моих доменных имен.Я буду добавлять много новых доменных имен (всего около 20-30 доменов).

Итак, скажем, мое основное доменное имя - example.com, и я хочу использовать это доменное имя для всего.Поэтому, если будут использоваться любые другие мои домены, они будут автоматически перенаправлены на основной домен с сохранением префикса субдомена и пути URL.

Пример:
test.example.org => test.example.com
test2.example.co.uk => test2.example.com
test3.example.net/hello/world.php => test3.example.com/hello/world.php

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.([a-zA-Z]+)\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1\.example.com/$1 [R=301,L]

Я не уверен, что вышеприведенное будет работать правильно или это правильный синтаксис.Но в целом я хотел бы, чтобы он совпадал с префиксом субдомена, затем с любым доменным именем и любым TLD (.org, .info, .biz, .co.uk, .net и т. Д.).Я бы предположил, что сначала нужно убедиться, что это не правильный основной домен (example.com), чтобы предотвратить бесконечный цикл перенаправления.

Также есть возможность проверить, включен ли HTTPS или выключени правильно установить редирект?Если нет, я всегда могу установить для HTTPS значение ON.

Извините за эту путаницу, хотя я хочу убедиться, что я правильно понял это с первого раза, без необходимости программировать каждый домен в.htaccess.

Спасибо!:)

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

(. *) Жадный, поэтому вы не хотите его использовать, и я предполагаю, что вы не хотите воссоздавать бесконечный цикл.

RewriteEngine on

RewriteCond   %{HTTPS}s    ^..(s?)
RewriteRule   ^            -                                [E=PROTO:http%1]              

RewriteCond   %{HTTP_HOST} !^\w+\.example\.com$             [NC]
RewriteCond   %{HTTP_HOST} ^(\w+)\.\w+\..+                  [NC]
RewriteRule   ^/?(.*)      %{ENV:PROTO}://%1.example.com/$1 [R=301,L]

1 голос
/ 23 февраля 2012

Это правило не будет работать, потому что оно перенаправит любой хост, заканчивающийся на example.com, обратно на example.com, и вы получите цикл перенаправления. Вам нужно изменить регулярное выражение, чтобы оно выглядело так, чтобы оно совпадало со всем, что не заканчивается .com:

RewriteCond %{HTTP_HOST} ^([^\.]+)\.?([a-zA-Z]+)\.(?:(?!com).)*$ [NC]
...