每当有人访问intern.old-company-name.example.com
我希望它被redirect到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}
上执行正则expression式,以便在redirect到https
之前将old-company-name
replace为new-company-name
? 或者也许类似的东西?
更新
# apachectl -S VirtualHost configuration: 10.10.10.10:443 is a NameVirtualHost default server aybcom (/etc/httpd/conf.d/ssl.conf:85) port 443 namevhost aybcom (/etc/httpd/conf.d/ssl.conf:85) Syntax OK
我们让HTTP侦听器处理HTTP到HTTPS的行为,并将旧名称转换为由HTTPS侦听器处理的新名称行为。 (我们可以让HTTPredirect也进行名称更改,但是这样可以将所有内容保存在一个地方,使其更简单。)
所以,在你的主configuration文件中,我们会稍微调整一下原来的configuration文件:
RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://${HTTP_HOST}$1
然后在/etc/httpd/conf.d/ssl.conf
的<VirtualHost>
中,我们将执行名称redirect:
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所有的语法和细节。 我不能肯定地说,你可以实现你想要的 – 而且我不确定你为什么想在这种情况下修改头文件。