mod_rewriteの考え方。こせきの技術日記スマートフォン用の表示で見るこせきの技術日記この広告は、90日以上更新していないブログに表示しています。2009-06-11mod_rewriteの考え方。Apachehttp://httpd.apache.org/docs/2.2/mod/mod_rewrite.htmlを見ながら。URLが正規表現(A)にマッチし、かつ文字列(B)が条件(C)を満たす場合に、URLを(D)に書き換える。RewriteRuleURLが(A)の正規表現にマッチしたら(D)で書き換える。以下のような正規表現でリライトされる。1文字マッチしたらリライト実行。空文字列でなければ実行する。先頭にマッチしたらリライト実行。$0で後方参照するのでなければ全体にマッチする必要はないと思う。先頭にマッチ^でも十分なはず。理由があるなら知りたい。dispatch.phpへのアクセスでなければdispatch.phpにアクセスする。QSAでクエリー文字列を足す。認証ユーザを環境変数に設定。[E=REMOTE_USER:%{HTTP:Authorization},L]^(.*)$も大量に見つかるが、カッコの意味はあるんだろうか。./inc/bx/php/UserFile.php?file=$1$1の代わりに$0が使えるし、%{REQUEST_URI}が使える。mod_balancerとの連携。ファイルが無かったらmongrel_clusterに送る。[P,QSA,L]ちなみに、abでベンチマークを取ってみたが、^でも^(.*)でも速度はまったく変わらなかった。読みやすくていいのかも。ファイルのパスと区別がつかない。→/wwwがファイルシステムに存在するかどうかで判断。ホスト名が一致したら取り除いてURLパスに。なければリダイレクトかプロキシ。→フラグの操作だけを実行したい場合に使う。フラグ[F1]でURLの置換を超えた操作を指定できる。このURLにはこれ以上RewriteRuleを適用しない。RewriteCond正規表現(A)に追加する条件。URLが(A)にマッチし、かつ、RewriteCondを全て満たしたら(D)に書き換える。(C)は正規表現、文字列の比較<=>、ファイルテスト(-f)など。フラグ[F2]で条件の動作オプションを指定できる。通常ANDで接続するところをORでつなぐ。大文字小文字を区別しない。リダイレクトしたい場合。[L,R=301,NE]</VirtualHost>のように設定する。以下にApacheオススメの設定(以下ガイド版と呼ぶ)がある。上はこのガイド版を修正したもの。正規ドメイン名以外にマッチした場合に書き換える。否定パターンを書く方がシンプルで更新も楽。非正規ドメイン名をServerAliasで好きなだけ足せる。2行目はひとまず置いておいて、3行目。http://example.com/?a=%2561にリダイレクトされてしまう。%が%25にエスケープされるのを止めるには、NEが必要。http://www.hatena.ne.jp/?a=%2561にリダイレクトされる。