BLOG

Go to top


mod_rewriteで携帯からのリクエストをリダイレクトする

July 31, 2007 12:23 PM

先例もたくさんあるし、簡単にいけるだろう…と思っていたら、意外と手間取ってしまったので忘れないうちにメモしておこうかと。依頼事項は、最近リニューアルした自社サイトに携帯3キャリアでアクセスした場合、携帯用ページにリダイレクトすること、3キャリアを判別して表示画像のファイル形式を変えること。phpとかcgiとかで携帯ページへリダイレクトしてもいいんだけど、apache側で振り分けるのがやっぱりスマートだと思うので、.htaccessへの記述で対応することにしました。記述内容はこんな感じ。

RewriteEngine On

# 以下、3キャリア(J-PHONE, vodafone含む)携帯ページへリダイレクトする

RewriteCond %{HTTP_USER_AGENT} DoCoMo [NC]
RewriteRule ^$ http://3xstars.org/mobile/ [L]

RewriteCond %{HTTP_USER_AGENT} vodafone [NC]
RewriteRule ^$ http://3xstars.org/mobile/ [L]

RewriteCond %{HTTP_USER_AGENT} J-PHONE [NC]
RewriteRule ^$ http://3xstars.org/mobile/ [L]

RewriteCond %{HTTP_USER_AGENT} SoftBank [NC]
RewriteRule ^$ http://3xstars.org/mobile/ [L]

RewriteCond %{HTTP_USER_AGENT} Up.Browser [NC]
RewriteRule ^$ http://3xstars.org/mobile/ [L]

# 以下、gif画像へのアクセスをpng画像にリダイレクト
# ドコモにはデフォルトの画像を表示させるため設定しない

RewriteCond %{HTTP_USER_AGENT} vodafone [NC]
RewriteRule (.*)\.gif$ http://3xstars.org/$1.png [L]

RewriteCond %{HTTP_USER_AGENT} J-PHONE [NC]
RewriteRule (.*)\.gif$ http://3xstars.org/$1.png [L]

RewriteCond %{HTTP_USER_AGENT} SoftBank [NC]
RewriteRule (.*)\.gif$ http://3xstars.org/$1.png [L]

RewriteCond %{HTTP_USER_AGENT} Up.Browser [NC]
RewriteRule (.*)\.gif$ http://3xstars.org/$1.png [L]

リダイレクト先で、RewriteEngineを切っておかないとおぞましいループが起きるので、/mobile/に、以下の内容の.htacceessを設置する。

RewriteEngine Off

なんで不細工にもRewriteCondをひとつひとつ記述してるかというと、なぜか [OR]オプションをつけてまとめて記述すると動作しなかったからです。リダイレクトはするのですが、なんでもかんでもリダイレクトするのでやめておきました。ちなみに [NC]オプションは、大文字小文字の区別をしないということを意味します。[L]をつけることで、条件にマッチした場合そこで判定終了(以下に続くRewriteRuleを評価しない)させます。この場合はおまじないみたいなものですが。

たとえば画像のリダイレクトだけを考えるならRedirectMatchでもいいのだけれど、今回のようにUSER_AGENTを判別する必要があるときは、条件設定のためRewriteCondとRewriteRuleを使う。RewriteCondとRedirectMatchを同時に使っても条件設定が反映されない(当然か)。

携帯用ページ作成のときは、サーバのmod_rewrite設定聞いておかないといけないな…

Comments


Contact me

Copyright © 2005 - 2017 okayama All rights reserved.