■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が適用されたりする。・RewriteOptions・・・・内部リダイレクトの 無限ループを防ぐために、mod_rewrite はリダイレクトの 上限に達するとリクエストを中止し、500 Internal Server Error を応答として 返します
・RewriteLogs・・・・・・サーバで書き換えたアクションを格納するファイル名を設定します。
・RewriteLogLevel・・高いLevel を使用すると劇的にApacheサーバは遅くなります! 書き換えログファイルはデバッグの時に使用し、少なくとも 2 以下のを使ってください!
・RewriteMap・・・・・・・外部プログラムを使用したURL書き換えが可能。マップ名とファイル名を指定する。
・RewriteBase・・・・・・書き換えにおいてベースとなる URL を明示的に指定するものです。rewriteした後のURLで再度Apacheに内部的にリクエストする」という特殊処理があり、この再リクエストの際のディレクトリ補正に使われるのがRewriteBase
・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
http://japache.infoscience.co.jp/japanese_1_3/manual/mod/mod_rewrite.html