
たまには技術的なことも…。
今、自社であるWebサービスを開発していて、なんとか簡単にサブドメインを追加できないかと考えていろいろ調べた結果を記録しておきます。
主旨:Webのサービスで、ユーザが任意のIDを登録したらそのIDがサブドメインの専用ページを作るようなケースで、Apacheの定義ファイルを操作したりApacheを再起動することなく、自動でサブドメインを割り当てたい
環境:Linux(CentOS5)、Apache2系
問題点:通常サブドメインを作成する際は、VirtualHostなどを使用して、Apache定義ファイルに定義して、Apacheを再起動または定義際読み込みをする。これは手動で行うか、プログラム内で定義を更新し、cronで一定期間ごとに再起動行うが、面倒くさいのでRewriteさせる。
方法:Rewriteモジュールを使用して、指定のディレクトリに作られた、任意のフォルダをサブドメインとして認識させる。※VirtualHostを設定している場合は、httpd.confファイル等の<VirtualHost>タグ内に記入する。
<VirtualHost *:80>
ServerName example.com:80
ServerAlias *.example.comRewriteEngine On
RewriteLog “/home/example/log/rewrite.logRewriteCond %{HTTP_HOST} ^[^.]+\.example\.com$
RewriteRule ^(.+) %{HTTP_HOST}$1 [C]
RewriteRule ^([^.]+)\.example\.com(.*) /sub/$1$2
</VirtualHost>
解説:
ほんとは、http://www.example.com/sub/bricoleur/ というURLのコンテンツを
http://bricoleur.example.com/というURLにみせかける。
****.example.com/xxxx でアクセスされたら
→ http://example.com/sub/****/xxxx をページ表示する