Каждый раз, когда кто-то посещает intern.old-company-name.example.com
Я бы хотел, чтобы его перенаправили на https://intern.new-company-name.example.com
. Один из способов сделать это -
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*) https://intern.new-company-name.example.com$1
# RewriteRule ^(.*) https://%{HTTP_HOST}$1
</IfModule>
но мне не нравится, что я жестко кодирую внешний поддомен intern
в httpd.conf
.
Вопрос
Можно ли сделать регулярное выражение на %{HTTP_HOST}
так old-company-name
заменяется на new-company-name
до перенаправления на https
? А может, что-то подобное?
Обновить
# apachectl -S
VirtualHost configuration:
10.10.10.10:443 is a NameVirtualHost
default server a.y.b.com (/etc/httpd/conf.d/ssl.conf:85)
port 443 namevhost a.y.b.com (/etc/httpd/conf.d/ssl.conf:85)
Syntax OK
Пусть поведение HTTP в HTTPS обрабатывается прослушивателем HTTP, а поведение старого имени для нового имени обрабатывается прослушивателем HTTPS. (Мы могли бы сделать так, чтобы перенаправление HTTP также изменяло имя, но при этом все будет в одном месте и будет проще.)
Итак, в ваш основной файл конфигурации мы вернем исходную конфигурацию с небольшой настройкой:
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://${HTTP_HOST}$1
Затем внутри <VirtualHost>
в /etc/httpd/conf.d/ssl.conf
сделаем перенаправление имени:
RewriteCond %{HTTP_HOST} ^([^\.]+)\.old-company-name\.example\.com$
RewriteRule ^(.*)$ https://%1.new-company-name.example.com$1 [R,L]
Изменить заголовки можно с помощью mod_headers - проверьте http://httpd.apache.org/docs/2.2/mod/mod_headers.html за весь синтаксис и детали. Я не могу сказать наверняка, что вы можете добиться того, чего хотите - и я не совсем уверен, почему вы хотите изменить заголовок в этом случае.