2009年12月12日土曜日

mod_rewriteについて

以前mod_rewriteについて調べた事があったのでまとめておきます。


■mod_rewriteって?
  URL を操作するためのスイス製のアーミーナイフなんて言われてる。
  クライアントが送信してきたURLをサーバー側で変更して処理するためのモジュール。
  変更するには正規表現必須ですね。


■使用条件は?
 ・.htaccessが自由に利用でき、mod_rewriteの機能が使えるサーバを使っている事。
  .htaccessが利用できるならレンタルサーバーでもOKって事。


■どんな事が出来る?
  ・URLの末尾が .cgi とか.phpで終ると検索エンジンのロボットに無視されることが多くなる。
   →上記の様な動的ページを疑似的に静的ページにしてしまう。
  ・携帯でのアクセスは別ページにしたいけどURLは変えたくない場合。
  ・サイトの引越し通知
   →HTTPステータスコードの301(=Moved Permanently、永久に移動したという意味)を返して更に、URLを書き換える事で新しいURLにアクセスできる。PageRankもほぼ引き継げる。
  ・特定のリファラやロボットにはアクセスさせない。(直リン禁止とか。直リン禁止にするとメーリングリストとかでちと困るらしい・・・)


■使用方法
 ・httpd.confに設定する or .htaccessに設定する。前者はサーバー全体、後者はディレクトリ毎に動作を制御するためのファイル。
  でも、.htaccess による設定は処理が遅くなるらしい。root権限があるなら、httpd.confで設定するとよい。







■命令まとめ(設定ファイルに記述する基本的な項目)
・rewriteEngine ・・・・・命令はランタイム書き換えエンジンを有効又は無効にします。 off を設定すると、このモジュールはランタイム処理を行いません。コメント化ではなくこれを使用する
・RewriteOptions・・・・内部リダイレクトの 無限ループを防ぐために、mod_rewrite はリダイレクトの 上限に達するとリクエストを中止し、500 Internal Server Error を応答として 返します
・RewriteLogs・・・・・・サーバで書き換えたアクションを格納するファイル名を設定します。
・RewriteLogLevel・・高いLevel を使用すると劇的にApacheサーバは遅くなります! 書き換えログファイルはデバッグの時に使用し、少なくとも 2 以下のを使ってください!
・RewriteMap・・・・・・・外部プログラムを使用したURL書き換えが可能。マップ名とファイル名を指定する。
・RewriteBase・・・・・・書き換えにおいてベースとなる URL を明示的に指定するものです。rewriteした後のURLで再度Apacheに内部的にリクエストする」という特殊処理があり、この再リクエストの際のディレクトリ補正に使われるのがRewriteBase
・RewriteCond・・・・・・環境変数やその他の条件に応じた判定を付加する。(HTTP_USER_AGENTとか)結果によってRewriteRuleが適用されたりする。
・RewriteRule・・・・・・「一致パターン 置換パターン フラグ」を記述





まとめ
http://httpd.apache.org/docs/1.3/misc/rewriteguide.html
http://d.hatena.ne.jp/zakira/20080129/1201614381
http://webcraft.jp/asy/linux/mod_rewrite.htm#002
http://net-newbie.com/trans/mod_rewrite.html#Solutions
http://japache.infoscience.co.jp/japanese_1_3/manual/mod/mod_rewrite.html