У меня есть настройка конфигурации Apache с несколькими виртуальными хостами в качестве поддоменов. Я только что приобрел новое доменное имя и хочу, чтобы все запросы к этому доменному имени перенаправлялись на новое, включая поддомены:
old.com > new.com
sub.old.com > sub.new.com
Есть ли простой способ сделать это внутри httpd.conf
?
Прошло некоторое время с тех пор, как я написал RewriteRule, но вот моя трещина:
RewriteEngine on
RewriteCond %{HTTP_HOST} (.+\.)?old\.com$ [NC]
RewriteRule (.*) http://%1new.com$1 [R]
Поместите это в виртуальный хост на основе имени для old.com. Вот мыслительный процесс, чтобы вы могли попытаться исправить это самостоятельно, если я немного заржавел:
RewriteCond
сломать:
RewriteCond
соответствует всем входящим хостам по префиксу «один или несколько символов, за которыми следует буквальная точка», за которым следует old.com. Точка находится внутри круглых скобок, потому что она не будет присутствовать, пока не будет предоставлен компонент поддомена.?
указывает, что все, что содержится в скобках, является необязательным. (компонент поддомена)$
символ прикрепляет регулярное выражение к концу строки, чтобы предотвратить странность преждевременного сопоставления.[NC]
flag заставляет это быть нечувствительным к регистру.RewriteRule
.RewriteRule
сломать:
(.*)
.[R]
флаг указывает действие перенаправления.%1
, которая является первой строкой, захваченной RewriteCond
. В этом случае это должен быть суффикс домена. Отсутствие префикса точки перед new.com важно: возможно, не было компонента поддомена, и в этом случае точки не должно быть. Точка должна была быть записана как часть регулярного выражения RewriteCond.$1
, что соответствует первой строке, захваченной RewriteRule
. Это должен быть URI, к которому пользователь пытался получить доступ в поддомене.Если кто-то указывает на решение этой проблемы, которое предотвращает использование RewriteRule, браво им: вы должны предпочесть это как свое решение, где это возможно. mod_rewrite
предназначен для случаев, когда вам не хватает более элегантного решения, предоставляемого специальными директивами конфигурации.
Я также должен отметить, что этот пример будет выполнять только перенаправление без HTTPS и не принимает во внимание, использует ли веб-сервер альтернативный порт. Возможно, вам придется настроить это дополнительно для особых нужд, таких как те, но это отправная точка.