<VirtualHost *:80>
ServerAlias *.mainsite.com
...
...
</VirtualHost>
Deve pegar qualquer coisa que não esteja definida de outra forma.
Aqui está minha configuração atual:
Na parte inferior de httpd.conf , tenho o seguinte:
NameVirtualHost *:80
Include /etc/httpd/conf/vhosts/*
Dentro de /etc/httpd/conf/vhosts eu tenho os seguintes arquivos:
mainsite.com.conf:
<VirtualHost *:80>
DocumentRoot "/var/www/vhosts/mainsite.com"
ServerName mainsite.com
ServerAlias www.mainsite.com
<Directory "/var/www/vhosts/mainsite.com">
allow from all
Options -Indexes
</Directory>
</VirtualHost>
sub1.mainsite.com.conf:
<VirtualHost *:80>
DocumentRoot /var/www/vhosts/sub1.mainsite.com
ServerName sub1.mainsite.com
<Directory "/var/www/vhosts/sub1.mainsite.com">
allow from all
Options -Indexes
</Directory>
</VirtualHost>
Por enquanto, tudo bem! mainsite.com e www.mainsite.com ambos compartilham o mesmo DocumentRoot (e com algum redirecionamento depois eu posso redirecionar todos os www.mainsite.com usuários para mainsite.com para SEO). sub1.mainsite.com também tem seu próprio DocumentRoot e não interfere em mais nada.
No entanto, <Anything that isn't www or sub1>.mainsite.com recebe o mesmo DocumentRoot que mainsite.com e www.mainsite.com get. Em vez disso, prefiro uma página de erro para qualquer host que não corresponda a VirtualHost .
E agora para a questão real:
O que posso ajustar para obter o efeito desejado? Além disso, as regras de diretório comuns entre o VirtualHost s podem ser refatoradas em httpd.conf ? Em caso afirmativo, eu faria algo como o seguinte?
<Directory "/var/www/vhosts">
allow from all
Options -Indexes
</Directory>
Eu uso uma definição vhost catchall que é a última a ser lida
<VirtualHost *:80>
ServerName default
ServerAlias *
DocumentRoot /var/www/default
ErrorDocument 404 /404.html
<Directory "/var/www/default">
Options All
AllowOverride None
allow from All
</Directory>
</VirtualHost>
O arquivo index.html padrão informa ao usuário que não há como ver no endereço fornecido. O arquivo 404.html mesmo.