在Apache 2.2中禁用* .example.com

我的网站既有和没有www子域(即example.comwww.example.com工作)。 不过, anything.example.com也可以正常工作,并提供相同的网站内容。

如何禁用除www.example.com之外的所有子域名? 我希望所有其他子域返回一个404错误或只是不显示任何东西。

现在configuration如下:

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

添加到VirtualHostconfiguration并启用mod_rewrite:

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

ServerName www.domain.com

并注释掉#ServerAlias …

那么当你请求domain.com你会得到默认的Apache网站apache2ctl -S会告诉你哪一个是默认的…

或者如果你想通过mod_rewrite来做到这一点。

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

如果没有为www.domain.com指定任何请求,这将给403

或者,如果你想,你可以redirect到www,所以他们不使用其他子域的选项。

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

你可以创build一个捕获所有的虚拟主机。 确保它是你定义的最后一个虚拟主机,因为以前不匹配的任何东西都会被它捕获。

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

在虚拟主机的DocumentRoot中没有显示任何简单的空白index.html文件。