- 締切済み
apacheのVirtualHostの記述について
サブドメイン *.hoge.com へアクセスされた際、 ドキュメントルート /var/www/subDomains/*/ を参照させたいので、httpd.confを以下のように設定しました。 <VirtualHost *> ServerAlias *.hoge.com VirtualDocumentRoot "/var/www/subDomains/%1/" ・・・ </VirtualHost> これはうまく動作するのですが、上記サブドメイン設定とは別に メインドメイン(hoge.com または www.hoge.com)へアクセスされた場合のみ ドキュメントルート /var/www/main/ を参照させたいのです。 なので、上記記述とは別に、 <VirtualHost *> DocumentRoot "/var/www/main/" ServerName www.hoge.com ・・・ </VirtualHost> を追加したのですが、このメインドメイン用記述は無視されてしまいます。 ※メインドメインへアクセスしても、サブドメイン用のVirtualDocumentRoot である /var/www/subDomains/www/ を参照してしまいます。 こうなってしまう原因は、サブドメイン用の記述である ServerAlias *.hoge.com の指定で、「www.hoge.com」が対象となっているからだと思いますが、 正規表現で「www.hoge.com」を除外する方法や、 その他解決策がありましたらご教授よろしくお願いします。 apacheのバージョンは2.2.15です。 ※ちなみに、正規表現による除外は「ServerAlias (?!www)*.hoge.com」を試してみましたがダメでした。 書き方が悪いのかもしれません。。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- anmochi
- ベストアンサー率65% (1332/2045)
書く順番が悪いのではないでしょうか。 ~~~~悪い例~~~~ <VirtualHost *> ServerAlias *.hoge.com VirtualDocumentRoot "/var/www/subDomains/%1/" ・・・ </VirtualHost> <VirtualHost *> ServerName www.hoge.com DocumentRoot "/var/www/main/" ・・・ </VirtualHost> ~~~~~~~~ これだとwww.hoge.comで先にワイルドカードエイリアスが引っかかります ~~~~良い例~~~~ <VirtualHost *> ServerName www.hoge.com DocumentRoot "/var/www/main/" ・・・ </VirtualHost> <VirtualHost *> ServerName servers.hoge.com ServerAlias *.hoge.com VirtualDocumentRoot "/var/www/subDomains/%1/" ・・・ </VirtualHost> ~~~~~~~~ こうする事でwww.hoge.comの場合は/var/www/mainを見に行くようになります。 httpdコマンドに-Sをつけて実行すると、Apacheがどの順番でバーチャルホストを認識しているかが分かります。