dT*blog

design and programming

mod_rewrite モジュールを使ってみる

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引数の内容に書き換え
RewriteCondRewriteRule 実行の条件を指定可能
RewriteMapRewriteCond または 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

トラックバック

このエントリーのトラックバックURL
http://www.deftrash.com/admin/mt/mt-tb.cgi/291

コメント




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31