2009-04-16 16 views
59

Ich habe eine seltsame Situation, wo ich die URLs app1.example.com, example.com und *.example.com alle mit einem anderen virtuellen Host haben möchten. Das ist, was ich habe (ohne example.com, weil es es gerade unordentlicher macht).Virtualhost für Wildcard-Subdomain und statische Subdomain

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

Das Problem ist, dass sie in Konflikt stehen. Welcher zuerst aufgeführt wird, gewinnt. Wie kann ich sowohl einen Wildcard-VirtualHost als auch einen spezifischen Hosthost verwalten?

Hinweis: Ich ändere nicht nur DocumentRoot in der Konfig, so mod_rewrite verwenden, um die DocumentRoot-Variable zu ändern, es nicht zu beheben.

Antwort

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> 

Sollte funktionieren. Der erste Eintrag wird zum Standard, wenn Sie keine explizite Übereinstimmung erhalten. Wenn Sie also auf app.otherexample.com zeigen würden, wäre es app1.example.com.

+1

Nur eine Frage auch weitere Informationen, was bedeutet 'Namevirtualhost *: 80' tun? –

+0

Diese Direktive aktiviert die namensbasierten virtuellen Hosts und teilt apache mit, dass sie alle IPs (*) auf Port 80 abhören soll. Apache 2.2 Docs: http://httpd.apache.org/docs/2.2/en/vhosts/name-based .html –

+3

Entfernen Sie den 'NameVirtualHost *: 80': AH00548: NameVirtualHost hat keine Wirkung und wird in der nächsten Version entfernt – nerdoc