Adicione à configuração do VirtualHost e habilite o mod_rewrite:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.|)domain\.com$ [NC]
RewriteRule .* - [F]
Meu site funciona com e sem o subdomínio www (ou seja, ambos example.com
e www.example.com
work). No entanto, anything.example.com
também funciona e o mesmo conteúdo do site é veiculado.
Como posso desativar todos os subdomínios, exceto www.example.com
? Eu quero que todos os outros subdomínios retornem um erro 404 ou simplesmente não mostrem nada.
A configuração agora é a seguinte:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
...
</VirtualHost>
Adicione à configuração do VirtualHost e habilite o mod_rewrite:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^(www\.|)domain\.com$ [NC]
RewriteRule .* - [F]
colocar
ServerName www.domain.com
e comente o #ServerAlias ...
em seguida, quando você solicitar domain.com, você terá acesso ao site padrão do apache apache2ctl -S mostrará qual é o padrão ...
ou se você quiser fazer isso via mod_rewrite.
RewriteCond %{HTTP_HOST} !^www\.domain\.com$
RewriteRule (.*) - [F]
Isso dará 403 para qualquer solicitação não designada para www.domain.com
Ou, se você quiser, pode redirecioná-los todos para www, para que eles não usem o outro subdomínio opções.
RewriteCond %{HTTP_HOST} !^www\.domain\.com$
RewriteRule (.*) http://www.domain.com/ [R=301,L]
Você pode criar um catch all vhost. Certifique-se de que é o último vhost que você define, pois qualquer coisa que não tenha sido correspondida anteriormente será capturada por ele.
<VirtualHost *:80>
ServerName catchall
ServerAlias *
DocumentRoot /var/www/catchall
</VirtualHost>
Para mostrar nada, tenha um simples arquivo index.html em branco no DocumentRoot do vhost.
Tags virtualhost apache-2.2