2009-04-16 10 views
59

Ho una strana situazione in cui voglio avere gli URL app1.example.com, example.com e *.example.com tutti utilizzando un host virtuale diverso. Questo è quello che ho (escluso lo example.com perché lo rende solo più incasinato).Virtualhost per sottodominio wildcard e sottodominio statico

<VirtualHost *> 
    ServerName app1.example.com 
    ServerAlias app1.example.com 

    DocumentRoot = /var/www/app1 
    # Other configuration for this app here 

</VirtualHost> 

<VirtualHost *> 
    ServerName wildcard.example.com 
    ServerAlias *.example.com 

    DocumentRoot = /var/www/wildcard 
    # other configuration for this app here 

</VirtualHost> 

Il problema è che sono in conflitto. Qualunque sia elencata per prima, vince. Come posso ospitare sia un host virtuale jolly che uno specifico?

Nota: non sto cambiando semplicemente DocumentRoot nella configurazione, pertanto l'uso di mod_rewrite per modificare la variabile DocumentRoot non lo risolve.

risposta

134
<VirtualHost *:80> 
    DocumentRoot /var/www/app1 
    ServerName app1.example.com 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot /var/www/example 
    ServerName example.com 
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot /var/www/wildcard 
    ServerName other.example.com 
    ServerAlias *.example.com 
</VirtualHost> 

Dovrebbe funzionare. La prima voce diventerà l'impostazione predefinita se non si ottiene una corrispondenza esplicita. Quindi, se avessi fatto clic su app.otherexample.com, verrebbe rilevato come app1.example.com.

+1

Solo una domanda, che cosa 'NameVirtualHost *: 80' fare? –

+0

Questa direttiva abilita gli host virtuali basati sul nome e dirà ad apache di ascoltare su tutti gli ip (*) sulla porta 80. Documenti Apache 2.2: http://httpd.apache.org/docs/2.2/en/vhosts/name-based .html –

+3

Rimuovi il 'NameVirtualHost *: 80': AH00548: NameVirtualHost non ha alcun effetto e verrà rimosso nella prossima versione – nerdoc

1

I caratteri jolly possono essere utilizzati solo in ServerAlia anziché in ServerName. Qualcosa che mi ha lasciato perplesso.

Per il vostro caso d'uso, il seguente dovrebbe bastare

<VirtualHost *:80> 
    ServerAlias *.example.com 
    VirtualDocumentRoot /var/www/%1/ 
</VirtualHost> 

c'è anche ulteriori informazioni a https://www.chris-shaw.com/blog/using-wildcards-in-virtual-hosts-on-apache