使用Apache2将所有非www子域redirect到主www域

我有一个网站(domain.com),我想redirect我所有的二级域名(domain2.com,domain3.com)和这些域名的所有子域名(* .domain.com,* .domain2.com … )到主域www.domain.com(因为我希望后者是访问该网站的唯一URL)。

为此, 我创build了一个Apache虚拟主机来捕获所有这些可能性并redirect它们 (在configuration完DNS之后,这是不言而喻的)。 我把这个configuration放在Apache的文件夹“sites-enabled”的一个名为“999-catchall”的文件中。 注意:我使用这个名字来确保它是最后一个被检查的虚拟主机,因为我也有我的默认虚拟主机(000-默认为www.domain.com)和一个虚拟主机用于我的webmail(001-webmail for webmail.domain .COM)。

下面是这个“999-catchall”文件的内容:

<VirtualHost *:80> # catch... ServerName domain.com ServerAlias domain2.com domain3.com *.domain.com *.domain2.com *.domain3.com # ...and redirect RewriteEngine on RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] RewriteRule ^(.*)$ http://www.domain.com$1 [R=301,L] </VirtualHost> 

此configuration适用于domain.com,domain2.com,* .domain2.com,domain3.com和* .domain3.com, 但不适用于* .domain.com。 例如:如果我键入blabla.domain2.com,我被redirect到www.domain.com,但如果我inputblaba.domain.com,我不(我只是有一个“服务器找不到”的错误)。

我的方法是否正确? 你看到我的错误在哪里吗?

编辑:我的错误,我的DNS服务器没有正确configuration* .domain.com。 所以这个configuration工作,如果它可以帮助谁想要做同样的事情的人。

我不是Apache专家,但考虑过改变:

 ServerName www.domain.com ServerAlias domain.com domain2.com domain3.com *.domain.com *.domain2.com *.domain3.com 

编辑:在重读OP,它看起来像你已经configurationwww.domain.com在不同的文件,我不相信是允许的。 但是,这可能是问题的一部分。 如果我正确地跟踪你,www.domain.com的回应是来自该文件,而不是在这里发布的configuration。

我会写如RewriteRule

 RewriteRule ^(/.*)$ http://www.domain.com$1 [R=301,L] 

以确保我不追加随机垃圾.com域

然后启用RewriteLogLevel 3和RewriteLog,并检查生成的文件是否有其他错误。

如果你可以将wget的输出附加到其中一个不起作用的域上,这将有所帮助。

我不知道你是否有任何虚拟主机在机器上,但尝试检查,看看blaba.domain.com还没有定义在你的configuration其他地方

注意:我使用这个名字来确保它是最后一个被检查的虚拟主机,因为我也有我的默认虚拟主机(000-默认为www.domain.com)和一个虚拟主机用于我的webmail(001-webmail for webmail.domain .COM)。

Vhostconfiguration文件从0开始按字母顺序检查,第一个将作为catchall。

从Apache(1.3到2.2)文档:

该列表中的第一个虚拟主机(具有指定IP地址的configuration文件中的第一个虚拟主机)具有最高的优先级,并捕获对未知服务器名称或未包含主机:标题字段的请求的任何请求。

您的其他选项可能是使用_default_:80虚拟主机。 请参阅使用_default_虚拟主机