我的网站在有和没有 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 文件。