我有一个网站(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_
虚拟主机