プロが教えるわが家の防犯対策術!

サブドメイン *.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」を試してみましたがダメでした。
書き方が悪いのかもしれません。。

A 回答 (1件)

書く順番が悪いのではないでしょうか。



~~~~悪い例~~~~
<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がどの順番でバーチャルホストを認識しているかが分かります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!