キャリア別にユーザーエージェントで振り分ける方法

最近ちょっと書くことの多いモバイル構築ネタをまたひとつ。
今回はアクセスしてきた端末をキャリアごとに振り分ける方法について。

ケータイサイトの場合、大枠としてはdocomo、au、SoftBank Mobileという3キャリアの端末からアクセスされることになります。
そもそもキャリアの技術仕様の違いもあり、各キャリアそれぞれ別にサイトの構築を行うのが通例で、その為キャリアごとに振り分ける必要があります。

とは言え、最近ではXHTMLによる3キャリア1ソースでの構築というのも珍しくはありません。そうした状況もあって、先日はDOCTYPE宣言について書いたりしたわけですが、サイト構築の目的やサイトジャンルなどによって、キャリア別にサイト構築を行う必要もあったりします。

それにキャリア公式サイトの場合は、基本的に3キャリア別に構築するのが当たり前ですしね。

で、どうやってキャリア別に端末を振り分けるかということになるのですが、今回は勝手サイトでよく使うhtaccessでの振り分け方をまとめておきます。

公式サイトの場合だとキャリア側で公開しているIPアドレスによる制限を使ったり、プログラムサイドで振り分けたりしますが、取り敢えず最も簡単な方法と言うことで。

各キャリア端末のユーザーエージェント

ケータイもPCブラウザと同様、それぞれユーザーエージェントがあります。例としては以下のようになります。

  • docomo
    DoCoMo/2.0 P902i(c100;TB;W24;H12)
  • au
    KDDI-KH23 UP.Browser/6.2.0.10.4 (GUI) MMP/2.0
  • SoftBank Mobile
    SoftBank/1.0/910T/TJ001/SN123456789012345 Browser/Netfront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1

あくまでこれは一例なので、その他の機種や機種のブラウザバージョンによってユーザーエージェントは異なるわけですが、各キャリアそれぞれ必ず共通する文字列があるので、それを使ってhtaccessを記述します。

.htaccessを記述する

一般的な記述方法は以下の通りです。

Options +FollowSymLinks RewriteEngine On  RewriteCond %{HTTP_USER_AGENT} DoCoMo [OR] RewriteRule ^$ http://hogehoge.com/i/ [R]  RewriteCond %{HTTP_USER_AGENT} SoftBank [OR] RewriteCond %{HTTP_USER_AGENT} J-PHONE [OR] RewriteCond %{HTTP_USER_AGENT} Vodafone [OR] RewriteRule ^$ http://hogehoge.com/y/ [R]  RewriteCond %{HTTP_USER_AGENT} UP.Browser RewriteRule ^$ http://hogehoge.com/e/ [R]

docomoの場合は社名英表記が、DoCoMoからdocomoに変わってますが、ユーザーエージェント上は今もDoCoMoのままとなっています。

SoftBank Mobileの場合は、かつてのVodafoneやJ-PHONEという文字列をユーザーエージェントに持っている端末もあるため、それらも一緒に記述しておかないといけません。

また、auは共通文字列としてKDDIというのもあるんですが、KDDIはPCサイトビューアーも含まれるため、そこで間違って振り分けられないようにUP.Browserの文字列を使うようにしています。

これで振り分けは出来るんですが、基本的にユーザーエージェントは容易に偽装が出来てしまうもの。Firefoxなどのブラウザを利用すれば簡単に偽装してアクセス可能なんですよねぇ。

有償であるだとか、PCからのキャプチャを取られたくないとか、ソースを見られたくないとか、そう言う場合は別の振り分け方法を使う必要があるので、その辺は注意してください。別の方法についてはまたまとめたいと思います。