mod_rewriteの[OR]

クローラ対策としてこういうことを実現しました。

  • ユーザエージェントが AAA,BBB,CCCのどれかで
  • リクエスURIが/hoge の時に
  • トップページへリダイレクトする。

一番目の「どれか」を表現するのには[OR]を使うんですが、
こういう表現になります。

RewriteCond %{HTTP_USER_AGENT} "AAA" [OR]
RewriteCond %{HTTP_USER_AGENT} "BBB" [OR]
RewriteCond %{HTTP_USER_AGENT} "CCC"

この次に、二番目の条件を書くとどうなるか。

RewriteCond %{REQUEST_URI} "/hoge"

希望としては、こうなってほしい。

( user_agent = "AAA or BBB or CCC" ) and ( request_uri = "/hoge")

でもRewriteCondってデフォルトではANDなので、こうなるような気もする。

( user_agent = "AAA" or "BBB") or (user_agent="CCC" and request_uri = "/hoge")

実験してみると、期待したとおり

( user_agent = "AAA or BBB or CCC" ) and ( request_uri = "/hoge")

となりました。かっこが書けるとはっきりするのにな。