2013/07/31

[Apache]mod_rewriteのRewriteCondを設定する

mod_rewriteのRewriteCondで込み入った書き方の情報がなかなか出てこず、手こずったので、サンプルをあげておきます。




RewriteCondとは

RewriteCondは、RewriteRuleでURIを書き換える場合に書き換える条件を記述するものです。
携帯電話のユーザーエージェントでは、DocomoやSoftbankがズバリ出てくるため、mod_rewriteでキャリア毎にウェブページを振り分ける事が容易にできます。

たとえば、IE6で閲覧してきたユーザーは完全に遮断するなど、条件がシビアな場合は、スペースを含んだり、メタ文字が混入していたりするので、エスケープが必要です。
以下は、IE6ユーザーでも特定のユーザーエージェントを持つ場合だけ別のファイルへリダイレクトする場合のRewriteCondです。
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "^Mozilla/4\.0 \(compatible; MSIE 6\.0; Windows NT 5\.1; SV1\)$" [NC]
RewriteCond %{REQUEST_URI} !^/waruikoto\.php$ [NC]
RewriteRule ^.*$ /waruikoto.php [L]

まず、「.」はエスケープする必要があります。
同様に「(」と「)」もエスケープする必要があります。
次に、スペースの対処ですが、エスケープしてみてもうまく動かなかったので、全体をダブルクォーテーションで囲ってみたところ、うまく動きました。

2つ目のRewriteCondがないと無限ループに陥るので、リダイレクト先を「!」で対象から外すのも忘れずに・・・。


0 件のコメント:

コメントを投稿