ApacheにはServerAliasなるディレクティブがあります。
今更知ることになり、なんて便利なんだ!と感動したのでこの勢いで紹介します!
ServerAliasのない世界
よくあるパターンですが、URLにwwwを入れるか入れないか、どちらかに統一したいという話がよくあると思います。
私はこの設定を今までのこんな感じでやってました。
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin admin@nautilus.xyz
DocumentRoot /srv/www/default
ServerName www.nautilus.xyz
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.nautilus.xyz
RewriteRule ^(.*)$ http://nautilus.xyz%{REQUEST_URI} [R=301,L]
</ifModule>
...
</VirtualHost>
<VirtualHost *:80>
ServerAdmin admin@nautilus.xyz
DocumentRoot /srv/www/default
ServerName nautilus.xyz
...
</VirtualHost>
このケースでは、www.nautlus.xyz => nautilus.xyzにリダイレクトしています。wwwを削除する方向に統一。うーん、ザ・冗長。www.nautilus.xyzとnautilus.xyzの両方のバーチャルホスト設定を書いてます。wwwの方は使わないのにね…
いろいろ設定書くって事は、変更あったら両方とも修正しないといけないから修正漏れとか書き間違いとかトラブルの種がその分増えるって事。設定ファイルもプログラムも書かないに越したことはないよね。
そこでServerAliasくんの登場ですよ。
ServerAliasのある世界
ServerAliasを使うとこんな感じに書き換えることができます。
NameVirtualHost *:80
<VirtualHost *:80>
ServerAdmin admin@nautilus.xyz
DocumentRoot /srv/www/default
ServerName nautilus.xyz
ServerAlias www.nautilus.xyz
<ifModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.nautilus.xyz
RewriteRule ^(.*)$ http://nautilus.xyz%{REQUEST_URI} [R=301,L]
</ifModule>
...
</VirtualHost>
バーチャルホストの設定を一つにまとめることができるわけです。
基本的に、nautilus.xyzのバーチャルホストとして、この設定を使う別のドメインをServerAliasとして設定しておきます。そして、ServerAliasのドメインでアクセスしてきたリクエストはnautilus.xyzにリダイレクト。
設定が一つになって、すっきり!うれしい!
こんなこと誰でも知ってるよ!ということかもしれないけど、これは便利だとおもいましたまる
http://nautilus.xyz/dev/157 からの転載です。