我的网站既有和没有www子域(即example.com
和www.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文件。