携帯サイトへの自動転送テストとApacheで携帯User-Agent判定方法

  • 投稿日:
  • by
  • カテゴリ:

仕事で運営しているサイトで携帯版ページを試験的に公開するにあたって、携帯からアクセスがあった場合に自動転送する処理をApacheでどうやるのか調べていた。結論から言えば User Agent で振り分けるだけなんだけど各携帯端末の User Agent の値がまとまっていなくてちょいと苦労した。

そういえば7月から自前の携帯はiPhone一本になったため携帯サイトの動作・表示確認がしづらくて困ったな。そんなときのための携帯ブラウザシミュレータ。docomoはシミュレーターを提供しているが手元の環境が Mac OS X なので VMware で Windows 起動して検証した。auは現在シミュレータ提供停止中。SoftBankは会員登録しないとダウンロードできないので面倒なのでダウンロードせず。

一旦iモードシミュレータで確認して、あとはTwitterで元気玉メソッド。あっという間に全国から(?)4キャリア14機種の検証結果が集められた。皆様その節はありがとうございました。

すぐに忘れてしまいそうなので設定をまとめておく。

Apache設定ファイル内の適切なディレクティブ内に(私の場合は特定のVirtualHost内)、以下のようにmod_rewriteを利用したリダイレクト設定を追加した。

  RewriteEngine on
  RewriteCond %{HTTP_USER_AGENT} DoCoMo      [NC,OR]
  RewriteCond %{HTTP_USER_AGENT} vodafone    [NC,OR]
  RewriteCond %{HTTP_USER_AGENT} J-PHONE     [NC,OR]
  RewriteCond %{HTTP_USER_AGENT} SoftBank    [NC,OR]
  RewriteCond %{HTTP_USER_AGENT} UP.Browser  [NC,OR]
  RewriteCond %{HTTP_USER_AGENT} Nokia       [NC,OR]
  RewriteCond %{HTTP_USER_AGENT} WILLCOM     [NC]
  RewriteRule ^/$ http://example.com/mobile/ [R,L]

リクエストヘッダーに含まれる User-Agent にマッチしているかどうか判定しているだけなのだが、見聞きした情報だけで設定をしてみたものの不具合がたくさん出てしまい、結局設定が反映されない端末のログを追ってみたり。Nokiaは X02NK だけしかテストしてないしスマートフォンなので携帯扱いにすべきか否かはとても微妙だが、同僚のT口君の一声「携帯サイトの方がありがたい」で決定してみたり。ラジバンダリ。

ちなみに RewriteCond の行末にある NC は nocase の略でアルファベットの大文字小文字を同一視するフラグで、OR はそのままで続く条件と or するフラグ。RewriteRule の R は redirect の略で指定の URL へ転送するフラグ、最後の L は last の略でこれが最後野ルール(=ここでおしまい)を指定するフラグになっている。つまりこれらの設定は HTTP_USER_AGENT が DoCoMo から WILLCOM までいずかにマッチする場合は携帯ページへリダイレクトするということになる。

ここではサイトトップ(http://example.com/)へのアクセスのみ転送しているが、携帯サイトの実装形態・運用形態によって変更する必要有り。

以下、検証済みの端末。

- docomo premini-II
- docomo N704iμ
- docomo SO502i ※SO502iはキャリアサイト・メーカーサイト両方とも存在せず。
- docomo SO903iTV
- docomo N903i
- docomo N906iμ
- au W44KII
- au W45T
- au W51CA
- au W61S
- au MEDIA SKIN
- au INFOBAR2
- WILLCOM 9(nine)+
- SoftBank X02NK