携帯からのアクセスをリダイレクトする
User-Agentに応じてコンテンツの内容を変えるにはmod_rewriteが便利です。ただし、書き方を気を付けないと可読性が低くメンテしにくい設定になってしまいます。
普通に書くとこんな感じです。User-Agentパターンは実際はかなりあります。
RewriteCond %{HTTP_USER_AGENT} DoCoMo [OR] RewriteCond %{HTTP_USER_AGENT} SoftBank [OR] RewriteCond %{HTTP_USER_AGENT} Vodafone [OR] RewriteCond %{HTTP_USER_AGENT} KDDI RewriteRule ^.*$ http://example.com/m/ [R,L]
ここで、リダイレクトはトップページだけに限定してみます。最近はテレビにもWebブラウザが搭載されていますので、テレビ向けコンテンツも用意します。
RewriteCond %{HTTP_USER_AGENT} DoCoMo [OR] RewriteCond %{HTTP_USER_AGENT} SoftBank [OR] RewriteCond %{HTTP_USER_AGENT} Vodafone [OR] RewriteCond %{HTTP_USER_AGENT} KDDI RewriteRule ^/$ http://example.com/m/ [R,L] RewriteCond %{HTTP_USER_AGENT} InettvBrowser RewriteRule ^/$ http://example.com/tv/ [R,L]
さらに、携帯やテレビ向けのコンテンツはUser-Agentを限定する要件があったりすると、設定はすぐにカオス化します。
そこで、BrowserMatchとRewriteCondを組み合わせると設定がすっきりします。BrowserMatchは上から順に評価されるので、どれにも該当しない場合の条件が非常に書きやすくなります。
BrowserMatch ".*" ua=pc BrowserMatch "DoCoMo" ua=mobile BrowserMatch "SoftBank" ua=mobile BrowserMatch "Vodafone" ua=mobile BrowserMatch "KDDI" ua=mobile BrowserMatch "InettvBrowser" ua=tv RewriteCond %{ENV:ua} mobile RewriteRule ^/$ http://example.com/m/ [R,L] RewriteCond %{ENV:ua} pc RewriteRule ^/tv$ http://example.com/ [R,L]
複雑な要件がある場合はBrowserMatchやSetEnvIfがおすすめです。RewriteCondのみに比べると文字列検索の回数が増えてしまうので、パフォーマンスの影響を測定したいですね。
ちなみに、User-Agentを変えながらの試験はJMeterでスクリプトを書いておくと楽です。テスト駆動構築は精神衛生上よろしい。