Apache でのVirtualHost運用

自宅サーバで、以下のようなドメインをちゃんと運用して、

http://www.example.com
http://a.example.com
http://b.example.com
http://c.example.com

そして以下のようなドメインへのアクセスはすべてhttp://www.example.comに飛ばすようにApacheの名前ベースVirtualHost設定がしたかった。

http://example.com
http://その他.example.com

いろいろ迷ったがなんとか設定できた。

  • DNSワイルドカード指定(*.example.com, example.com)でこのマシンに来るように設定。
  • (訂正)ServerName=www.exapmple.comのvhostを先頭に定義
  • (訂正)ServerName=example.comのvhostを末尾に定義。そこにServerAlias=*.example.comと定義。
  • (追記)<VirutalHost _default_:*>というvhost定義を先頭に定義
  • で、そこにRewriteRuleで http://www.example.comへ飛ばすように設定
  • (追記)www.exapmle.comのvhost設定が抜けると、リライト先がまた_default_ホストに落ちて無限ループ的になってしまうので気をつける。

以上で実現した。
以下の点で迷ってしまった。今後のためにメモしておく。

  • (訂正)<VirutalHost _default_:*>とかいうディレクティブを使うのかと迷ったが、_default_はIPベースVirtualHostで使うもののようで、名前ベースvhostではほぼ使わないように思えた。
  • (追記)<VirutalHost _default_:*>というvhost設定を書いておくと、他のvhost設定に該当しないリクエストをすべてここで受け付けるようになる。これを書かないと先頭のvhostがその役割を担う。(→ってことは、これを書いたときは、vhost設定の記述順はなんでもいいってことかな?)