2009-04-16 21 views
59

Tengo una situación extraña en la que quiero tener las URL app1.example.com, example.com y *.example.com, todas usando un host virtual diferente. Esto es lo que tengo (excluyendo example.com porque simplemente lo hace más desordenado).Virtualhost para subdominio de comodín y subdominio estático

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

El problema es que entran en conflicto. Cualquiera que esté en la lista primero gana. ¿Cómo puedo alojar un host virtual comodín y uno específico?

Nota: No estoy simplemente cambiando DocumentRoot en la configuración, por lo que usar mod_rewrite para cambiar la variable DocumentRoot no lo arregla.

Respuesta

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> 

Debería funcionar. La primera entrada se convertirá en la predeterminada si no obtiene una coincidencia explícita. Por lo tanto, si tuvieras aplio de app.otherexample.com, sería capturado por app1.example.com.

+1

Sólo una pregunta, ¿qué significa 'NameVirtualHost *: 80' hacer? –

+0

Esta directiva habilita los servidores virtuales basados ​​en el nombre y le indicará a apache que escuche en todas las direcciones IP (*) en el puerto 80. Apache 2.2 Docs: http://httpd.apache.org/docs/2.2/en/vhosts/name-based .html –

+3

Elimina el 'NameVirtualHost *: 80': AH00548: NameVirtualHost no tiene ningún efecto y se eliminará en el siguiente lanzamiento – nerdoc