最終更新日 2008年11月14日 up top

サブドメインのヴァーチャルホストの設定をmod_rewriteでやってみる

普通サブドメインでヴァーチャルホストを設定するときは、

NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /var/www/sample.com/htdocs/abc ServerName abc.sample.com </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/sample.com/htdocs/xyz ServerName xyz.sample.com </VirtualHost> <VirtualHost *:80> DocumentRoot /var/www/sample.com/htdocs/123 ServerName 123.sample.com </VirtualHost> とかやったりするが、サブドメインが100個もあると設定が面倒なので、mod_rewriteで自動的にやらせてみる。 NameVirtualHost *:80 <VirtualHost *:80> DocumentRoot /var/www/abc.sample.com/htdocs/abc ServerName *.sample.com RewriteEngine On RewriteCond %{HTTP_HOST} ^[^.]+\.sample\.com$ RewriteRule ^(.+) %{HTTP_HOST}$1 [C] RewriteRule ^([^.]+)\.sample\.com(.*) /$1$2 </VirtualHost> 正規表現でサブドメインの部分を抜き出し、ディレクトリ名に置き換えている。 つまりabc.example.comのホスト名でアクセスしてきた場合、abc.example.com/abcと書き換えている。 こうするとディレクトリを作ってその中にHTMLを突っ込むだけでよい。httpdの設定要らない。

この場合、DNSの設定でも、ワイルドカード指定し、サブドメイン名に何が来てもこのサーバのIPアドレスを返すように設定しておく。 @ IN A 10.0.0.1 * IN A 10.0.0.1 Bloggerとか、会員ページのURLは会員IDのサブドメインをもっていて、 (会員登録があるたびにhttpd.confを書き換えてhttpdをreloadしてるのだろうか:(;゙゚'ω゚'):)と2秒考えたがそんなわけないぢゃん。 と思った何年か前。