I'd expect it to fall-over to the first vhost, however with this setup, all domains resolve to my default site-not-found. Why is this?
Não há lógica de failover entre hosts virtuais diferentes - uma vez que uma solicitação é atribuída a uma, ela é final.
Quando você não tem ServerName
ou ServerAlias
em seu bloco vhost dinâmico, você está dependendo do comportamento "primeiro vhost para carregar é o padrão" para atribuir solicitações a esse vhost. Quando não é o primeiro vhost a carregar, é essencialmente inerte; não há como conseguir um pedido.
Minha recomendação sobre como lidar com isso é ter o comportamento "site não encontrado" como proxy ou redirecionado para um site de trabalho (que, por sua vez, exibe uma página "sem conteúdo aqui!"), em vez de uma variante da sua página 404.
Mova o sitenotfound.mydomain.org
vhost para baixo e obtenha o dinâmico novamente no topo para que seja o padrão. Nós vamos usá-lo para servir a nossa página amigável "no site here".
Então, vamos dar ao vhost dinâmico a capacidade de verificar se um site existe antes de exibir o conteúdo dele. Adicione dentro de seu vhost:
RewriteEngine On
# If there's no directory where it should be for this host..
RewriteCond /var/www/vhosts/%{HTTP_HOST} !-d
# (or a symlink, we'll be ok with those too)
RewriteCond /var/www/vhosts/%{HTTP_HOST} !-l
# Then, we'll redirect the user to our friendly "no site here" page..
# Note that I'm setting it to 302 so that they won't be cached, since
# you might trigger this accidentally just before a new site goes live..
RewriteRule ^ http://sitenotfound.mydomain.org/invalid-site.html [R=302,L]
# Or if you wanted to proxy instead of redirecting, use this instead:
#RewriteRule ^ http://sitenotfound.mydomain.org/invalid-site.html [P,L]
Portanto, o host dinâmico agora verificará a existência do diretório do site antes de veicular o conteúdo dele e redirecionará ou encaminhará o usuário para uma página de explicação amigável. Esse comportamento parece que vai atender às suas necessidades?