2009-04-16 17 views
59

URLがapp1.example.com,example.com*.example.comのすべてが異なる仮想ホストを使用しているという奇妙な状況があります。これは私が持っているものです(example.comを除くと、それはちょうどそれがより厄介になるので)。ワイルドカードのサブドメインと静的サブドメインのVirtualhost

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

問題はそれらが競合していることです。どちらが最初にリストされていても勝ちます。ワイルドカード仮想ホストと特定の仮想ホストの両方をホストするにはどうすればよいですか?

注:mod_rewriteを使用してDocumentRoot変数を変更しても問題が解決されないので、設定内でDocumentRootを変更するだけではありません。

答えて

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> 

明示的に一致しなければ、最初のエントリがデフォルトになります。したがって、app.otherexample.comを指していれば、app1.example.comであることがわかります。

+1

でも、より多くの情報がジャストご不明な点がございまし

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

で十分でしょうか? –

+0

このディレクティブは、名前ベースの仮想ホストを有効にし、apacheにポート80のすべてのIP(*)をリッスンするよう指示します。Apache 2.2ドキュメント:http://httpd.apache.org/docs/2.2/en/vhosts/name-based .html –

+3

'NameVirtualHost *:80'を削除してください:AH00548:NameVirtualHostは効果がなく、次のリリースで削除されます – nerdoc

関連する問題