我有一个Apacheconfiguration设置与多个虚拟主机作为子域。 我刚刚购买了一个新的域名,我希望对这个域名的所有请求redirect到新的域名,包括子域名:
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。 圆点在括号内,因为除非提供子域组件,否则它不会存在。 ? 指定括号内的所有内容都是可选的。 (子域组件) $字符将正则expression式锚定到string的末尾,以防止过早匹配奇怪。 [NC]标志强制这是不区分大小写的。 RewriteRule的传入主机头的子域组件。 RewriteRule细目:
(.*)捕获传入请求的整个URI。 [R]标志指定redirect动作。 %1 ,这是RewriteCond捕获的第一个string。 在这种情况下,它应该是域名后缀。 在new.com之前缺less一个前缀点很重要:可能没有一个子域组件,在这种情况下,应该没有点。 该点应该被捕获为RewriteCond正则expression式的一部分。 $1 ,它与RewriteRule捕获的第一个string相匹配。 这应该是用户在子域下尝试访问的URI。 如果有人指出一个解决scheme,避免使用RewriteRule,bravo给他们:你应该更喜欢作为你的解决scheme,在可能的情况下。 mod_rewrite适用于缺乏由专用configuration指令提供的更优雅的解决scheme。
我还应该注意,这个例子只会做非HTTPSredirect,并没有考虑到networking服务器是否使用替代端口。 您可能需要进一步调整这些特殊需求,如这些,但这是一个起点。