使用 Apache2 将所有非 www 子域重定向到主 www 域

6 alias redirect virtualhost domain-name apache-2.2

我有一个网站 (domain.com),我想重定向我所有的辅助域(domain2.com、domain3.com)和这些域的所有子域(*.domain.com、*.domain2.com... ) 到主域 www.domain.com(因为我希望后者是唯一可以访问该站点的 URL)。

为此,我创建了一个 Apache 虚拟主机来捕获所有这些可能性并重定向它们(在配置我的 DNS 之后,这是不言而喻的)。我将此配置放在 Apache 的“sites-enabled”文件夹中名为“999-catchall”的文件中。注意:我使用这个名称是为了确保它是最后一个检查的虚拟主机,因为我还有我的默认虚拟主机(www.domain.com 的默认值)和我的 webmail 的虚拟主机(webmail.domain 的 001-webmail) .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>
Run Code Online (Sandbox Code Playgroud)

此配置适用于 domain.com、domain2.com、*.domain2.com、domain3.com 和 *.domain3.com,但不适用于 * .domain.com 。示例:如果我输入 blabla.domain2.com,我会被重定向到 www.domain.com,但如果我输入 blaba.domain.com,我不会(我只是有一个“服务器未找到”错误)。

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

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

Gre*_*ort 1

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

ServerName www.domain.com
ServerAlias domain.com domain2.com domain3.com *.domain.com *.domain2.com *.domain3.com
Run Code Online (Sandbox Code Playgroud)

编辑:在重新阅读OP时,看起来您已经在不同的文件中配置了www.domain.com,我认为这是不允许的。然而,这可能是问题的一部分。如果我没听错的话,www.domain.com 响应来自该文件,而不是此处发布的配置。