2009-04-16 11 views
59

J'ai une situation étrange où je veux avoir les URL app1.example.com, example.com et *.example.com en utilisant un hôte virtuel différent. C'est ce que j'ai (à l'exclusion de example.com parce que cela le rend plus désordonné).Virtualhost pour sous-domaine générique et sous-domaine statique

<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> 

Le problème est qu'ils sont en conflit. Celui qui est listé en premier gagne. Comment puis-je héberger un virtualhost générique et un hôte spécifique?

Remarque: Je ne modifie pas simplement DocumentRoot dans la configuration, donc l'utilisation de mod_rewrite pour modifier la variable DocumentRoot ne la corrige pas.

Répondre

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> 

Devrait fonctionner. La première entrée deviendra la valeur par défaut si vous n'obtenez pas de correspondance explicite. Donc, si vous aviez app.otherexample.com, il serait attrapé être app1.example.com.

+1

Juste une question,? –

+0

Cette directive active les hôtes virtuels basés sur le nom et indiquera à apache d'écouter sur toutes les adresses IP (*) sur le port 80. Apache 2.2 Docs: http://httpd.apache.org/docs/2.2/fr/vhosts/name-based .html –

+3

Supprimer le 'NameVirtualHost *: 80': AH00548: NameVirtualHost n'a aucun effet et sera supprimé dans la prochaine version – nerdoc

1

Les caractères génériques ne peuvent être utilisés que dans ServerAlias ​​plutôt que dans ServerName. Quelque chose qui m'avait perplexe. 80` faire: qu'est-ce que `NameVirtualHost *

Pour votre cas d'utilisation, les éléments suivants devraient suffire

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

il y a aussi plus d'informations à https://www.chris-shaw.com/blog/using-wildcards-in-virtual-hosts-on-apache