Apacheredirect域和所有子域

我有一个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]标志强制这是不区分大小写的。
  • 由于虚拟主机将确保每个string都包含一个匹配的模式,所以这个匹配本身不起作用。 重要的是圆括号将捕获即将到来的RewriteRule的传入主机头的子域组件。

RewriteRule细目:

  • 使用(.*)捕获传入请求的整个URI。
  • 向前跳, [R]标志指定redirect动作。
  • redirecturl有两个替代:
    • 第一个是%1 ,这是RewriteCond捕获的第一个string。 在这种情况下,它应该是域名后缀。 在new.com之前缺less一个前缀点很重要:可能没有一个子域组件,在这种情况下,应该没有点。 该点应该被捕获为RewriteCond正则expression式的一部分。
    • 第二个是$1 ,它与RewriteRule捕获的第一个string相匹配。 这应该是用户在子域下尝试访问的URI。

如果有人指出一个解决scheme,避免使用RewriteRule,bravo给他们:你应该更喜欢作为你的解决scheme,在可能的情况下。 mod_rewrite适用于缺乏由专用configuration指令提供的更优雅的解决scheme。

我还应该注意,这个例子只会做非HTTPSredirect,并没有考虑到networking服务器是否使用替代端口。 您可能需要进一步调整这些特殊需求,如这些,但这是一个起点。