2007年1月29日
Linux | mod_rewriteの否定パターン
Apacheのmod_rewirteで、あるパスを除くといった条件をどう書けばいいのだろうと疑問に思っていたがRewriteRuleでも ! で否定パターンを使えることを今日知って、これとChainフラグを使えばRewriteRuleだけで実現できることが分かった。
RewriteRule !^/notrewrite/(.*) - [C]これで例えば、http://example.com/notrewrite/index.html はリライトされず、その他のパスへのアクセスは http://example.com/anydir/index.html → http://example.com/rewrited/anydir/index.html といった具合でリライトされる。
RewriteRule ^/(.*) /rewrited/$1
! を使ったパターンの場合は、グループ化による後方参照は使えないことに注意。
Comment
RewriteRule [C] 使わないでも、RewriteCond %{REQUEST_URI} !^/notrewrite/ とかを前置すればいけないかしら?
わたしゃ除外するときは RewriteCond 重ねて最後にそれ以外で RewriteRule ってやってます。
Posted by: kuriyama : 2007年1月30日 18:27
%{REQUEST_URI} には、http:// からの URL が入ってるんだと思ってました。ドキュメントをよく読んだら、ホスト名以降のリクエストパスでした。
これなら、RewriteCond 使えば大丈夫ですね。
Posted by: otsuka : 2007年1月30日 22:38