mod_rewriteのRewriteCondで込み入った書き方の情報がなかなか出てこず、手こずったので、サンプルをあげておきます。
携帯電話のユーザーエージェントでは、DocomoやSoftbankがズバリ出てくるため、mod_rewriteでキャリア毎にウェブページを振り分ける事が容易にできます。
たとえば、IE6で閲覧してきたユーザーは完全に遮断するなど、条件がシビアな場合は、スペースを含んだり、メタ文字が混入していたりするので、エスケープが必要です。
以下は、IE6ユーザーでも特定のユーザーエージェントを持つ場合だけ別のファイルへリダイレクトする場合のRewriteCondです。
まず、「.」はエスケープする必要があります。
同様に「(」と「)」もエスケープする必要があります。
次に、スペースの対処ですが、エスケープしてみてもうまく動かなかったので、全体をダブルクォーテーションで囲ってみたところ、うまく動きました。
2つ目の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がないと無限ループに陥るので、リダイレクト先を「!」で対象から外すのも忘れずに・・・。
コメント
コメントを投稿