Apache2.2で以下のように名前バーチャルホストを設定しました。
(一つの IP アドレスでいくつかの名前ベースの ウェブサイトを実行するタイプのバーチャルホストです。)
余談ですが、Apache2.2だと conf\extra\httpd-vhosts.conf に設定を書いてやればいいようです。
(httpd.confで "Include conf/extra/httpd-vhosts.conf" のコメントを退ける必要があります)
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2
DocumentRoot "E:/mydoc/hogeproject/html"
ServerName hogeserver
ErrorLog "logs/hogeserver-error.log"
CustomLog "logs/hogeserver-access.log" common
</VirtualHost>
<Directory "E:/mydoc/hogeproject/">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
しかし、これで localhost にアクセスしても、上記で設定したディレクトリのコンテツが表示されてしまうのです。
こちらが意図しているのはデフォルトのドキュメントルート("C:/Program Files/Apache Software Foundation/Apache2.2/htdocs")にアクセスして欲しかったのです。
で、
Apacheのマニュアルをみるとこう書いています。
アスタリスクはすべてのアドレスにマッチしますので、主サーバは リクエストを扱いません。www.example.com は 最初にあるため、優先順位は一番高くなり、default もしくは primary のサーバと考えることができます。つまり、リクエストが どの ServerName ディレクティブにもマッチしない場合、 一番最初の VirtualHost により扱われます。
なるほど。* とすると主サーバ、つまりhttpd.confにあるドキュメントルートは使われないようです。
といういことで、以下のようにしました。
これで ServerName と一致しないrequestは上側のデフォルトのドキュメントルートを見に行くようになります。
NameVirtualHost *:80
<VirtualHost *: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
</VirtualHost>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host2
DocumentRoot "E:/mydoc/hogeproject/html"
ServerName hogeserver
ErrorLog "logs/hogeserver-error.log"
CustomLog "logs/hogeserver-access.log" common
</VirtualHost>
<Directory "E:/mydoc/hogeproject/">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
参考:
(Apache)名前バーチャルホストでハマった