在 Apache 2.2 中禁用 *.example.com

在 Apache 2.2 中禁用 *.example.com

我的网站在有和没有 www 子域名的情况下都可以正常工作(即和都可以正常example.com工作www.example.com)。但是,anything.example.com也可以正常工作,并且提供相同的网站内容。

我如何禁用除 之外的所有子域www.example.com?我希望所有其他子域都返回 404 错误或不显示任何内容。

现在的配置如下:

NameVirtualHost *:80

<VirtualHost *:80>
        ServerName example.com
        ServerAlias www.example.com

        ...
</VirtualHost>

答案1

添加到 VirtualHost 配置并启用 mod_rewrite:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.|)domain\.com$ [NC]
RewriteRule .* - [F]

答案2

ServerName www.domain.com

并注释掉#ServerAlias...

然后当您请求 domain.com 时,您将获得默认的 apache 站点 apache2ctl -S 将显示哪一个是默认的...

或者如果您想通过 mod_rewrite 来执行此操作。

RewriteCond %{HTTP_HOST} !^www\.domain\.com$ 
RewriteRule (.*) - [F]

对于任何未指定 www.domain.com 的请求,这将导致 403

或者如果您愿意,您可以将它们全部重定向到 www,这样它们就不会使用其他子域名选项。

 RewriteCond %{HTTP_HOST} !^www\.domain\.com$  
 RewriteRule (.*) http://www.domain.com/ [R=301,L]

答案3

您可以创建一个捕获所有虚拟主机。请确保它是您定义的最后一个虚拟主机,因为任何之前未匹配的虚拟主机都将被它捕获。

<VirtualHost *:80>
        ServerName      catchall
        ServerAlias *
        DocumentRoot /var/www/catchall
</VirtualHost>

为了不显示任何内容,请在 vhost 的 DocumentRoot 中有一个简单的空白 index.html 文件。

相关内容