バーチャルホストのサーバ名別名でVirtualHost設定を簡素に


ApacheにはServerAliasなるディレクティブがあります。
今更知ることになり、なんて便利なんだ!と感動したのでこの勢いで紹介します!

ServerAliasのない世界

よくあるパターンですが、URLにwwwを入れるか入れないか、どちらかに統一したいという話がよくあると思います。
私はこの設定を今までのこんな感じでやってました。

httpd.conf
NameVirtualHost *:80

<VirtualHost *:80>
 ServerAdmin   [email protected]
 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  [email protected]
 DocumentRoot /srv/www/default
 ServerName   nautilus.xyz
 ...
</VirtualHost>

このケースでは、www.nautlus.xyz => nautilus.xyzにリダイレクトしています。wwwを削除する方向に統一。うーん、ザ・冗長。www.nautilus.xyzとnautilus.xyzの両方のバーチャルホスト設定を書いてます。wwwの方は使わないのにね…
いろいろ設定書くって事は、変更あったら両方とも修正しないといけないから修正漏れとか書き間違いとかトラブルの種がその分増えるって事。設定ファイルもプログラムも書かないに越したことはないよね。

そこでServerAliasくんの登場ですよ。

ServerAliasのある世界

ServerAliasを使うとこんな感じに書き換えることができます。

httpd.conf
NameVirtualHost *:80

<VirtualHost *:80>
 ServerAdmin  [email protected]
 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 からの転載です。