3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(Apache)名前バーチャルホストを設定したらメインのドキュメントルートにアクセスできなくなった

Apache2.2で以下のように名前バーチャルホストを設定しました。

(一つの IP アドレスでいくつかの名前ベースの ウェブサイトを実行するタイプのバーチャルホストです。)

余談ですが、Apache2.2だと conf\extra\httpd-vhosts.conf に設定を書いてやればいいようです。

(httpd.confで "Include conf/extra/httpd-vhosts.conf" のコメントを退ける必要があります)

NameVirtualHost *:80

ServerAdmin webmaster@dummy-host2

DocumentRoot "E:/mydoc/hogeproject/html"

ServerName hogeserver

ErrorLog "logs/hogeserver-error.log"

CustomLog "logs/hogeserver-access.log" common

Options Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

しかし、これで localhost にアクセスしても、上記で設定したディレクトリのコンテツが表示されてしまうのです。

こちらが意図しているのはデフォルトのドキュメントルート("C:/Program Files/Apache Software Foundation/Apache2.2/htdocs")にアクセスして欲しかったのです。

で、Apacheのマニュアルをみるとこう書いています。

アスタリスクはすべてのアドレスにマッチしますので、主サーバは リクエストを扱いません。www.example.com は 最初にあるため、優先順位は一番高くなり、default もしくは primary のサーバと考えることができます。つまり、リクエストが どの ServerName ディレクティブにもマッチしない場合、 一番最初の VirtualHost により扱われます。

なるほど。* とすると主サーバ、つまりhttpd.confにあるドキュメントルートは使われないようです。

といういことで、以下のようにしました。

これで ServerName と一致しないrequestは上側のデフォルトのドキュメントルートを見に行くようになります。

NameVirtualHost *:80

ServerAdmin webmaster@dummy-host2

ServerName hoge

DocumentRoot "C:/Program Files/Apache Software Foundation/Apache2.2/htdocs"

ErrorLog "logs/error.log"

CustomLog "logs/access.log" common

ServerAdmin webmaster@dummy-host2

DocumentRoot "E:/mydoc/hogeproject/html"

ServerName hogeserver

ErrorLog "logs/hogeserver-error.log"

CustomLog "logs/hogeserver-access.log" common

Options Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

参考:

(Apache)名前バーチャルホストでハマった