Apache へのアクセスをフックして、かなり強力な操作ができる mod_rewrite モジュール。これまでシコシコとアプリケーション側で対応していたものが、サクっとWebサーバが解決してくれる可能性大ですよ、これ。
豊富な機能をざっとながめて思いつくサービスとしては、httpアクセスのSSLへのリダイレクト、サブドメイン管理、リファラ判定などによるコメントスパム対策、ブラウザ判定や時刻によるリダイレクト。ブラウザ判定をうまく使えば、例えばフルフラッシュサイトで、検索エンジンのクローラにだけ別HTMLページを見せてSEO対策することもできそう。(そういう小賢しい対応は好きじゃないけど)
以下、大まかな機能と使い方のメモ。
apache2.0系でのサンプルなので、1.3系の人は読み替えたり、調べたりしてうまいことやってくださいまし。
# vi /usr/local/apache/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so RewriteEngine on
# サーバへのアクセスを新ドメイン newdomain にリダイレクト RewriteRule ^/(.*) http://newdomain/$1
VirtualHost を使っている場合は、設定している VirtualHost ごとに Rewrite の設定をしてあげる必要がある。たとえば、以下のような感じで。
# vi /usr/local/apache/conf/httpd.conf
LoadModule rewrite_module modules/mod_rewrite.so
<VirtualHost www.hoge.com> DocumentRoot /www/docs/hoge.com ServerName www.hoge.com RewriteEngine on RewriteRule ^/(.*) http://hoge.newdomain/$1 </VirtualHost> <VirtualHost www.moge.net> DocumentRoot /www/docs/hoge.com ServerName www.moge.net RewriteEngine on RewriteRule ^/(.*) http://moge.newdomain/$1 </VirtualHost>
使用できる主な設定ディレクティブを簡単にまとめ。
| ディレクティブ | 概要 |
|---|---|
| RewriteEngine | 実行時の書き換えエンジン On/Off の切り替え (デフォルトは Off) |
| RewriteLog | 書き換え動作のログを出力するファイル名の設定 |
| RewriteLogLevel | ログの出力レベル。数字が大きいほど詳細。デフォルトは 0 で、推奨値も 0 |
| RewriteBase | 書き換え時にベースとなるURLの指定 |
| RewriteRule | 第1引数に指定した正規表現パターンのマッチ内容を、第2引数の内容に書き換え |
| RewriteCond | RewriteRule 実行の条件を指定可能 |
| RewriteMap | RewriteCond または RewriteRule の第1引数を動的に設定するためのマッピング指定 |
RewriteCond は複合条件にも対応していて、複数条件を続けて書くことで AND条件に、 [OR]でつなげれば OR条件になる。また、条件文には HTTP_USER_AGENT や HTTP_REFERRER などの環境変数が使用できる。素晴らしいの一言。
やれることが多すぎるので、少し取っつきにくいけれども、使ってみると意外とアッサリ。むしろ何でもできそうな雰囲気に飲まれて、珍妙な発想しないことの方が、よほど難しい気がする。
最後に、携帯キャリアごとにページを振り分ける簡易版サンプル。[L] はそれ以降の条件を判定せずに終了させるオプション。(switch文の break みたいなもん)
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} DoCoMo RewriteRule ^/$ docomo/index.html [L]
RewriteCond %{HTTP_USER_AGENT} J-PHONE [OR] RewriteCond %{HTTP_USER_AGENT} Vodafone RewriteRule ^/$ vodafone/index.html [L]
RewriteCond %{HTTP_USER_AGENT} KDDI [OR] RewriteCond %{HTTP_USER_AGENT} UP\.Browser RewriteRule ^/$ au/index.html [L]
いまVodafoneのユーザエージェント情報を見たら、J-PHONE も Vodafone も含まれていない機種が出ているじゃないか。判定ルールどうすんだろ、これ。
Posted by dT by 17:48