Tutorial
この記事の読了時間:約7分10秒
携帯電話からのアクセスとPCからのアクセスを振り分けたい場合、IPでガッツリ判別するか、ユーザーエージェントでやんわり判別するか、このどちらかがほとんどだと思います。
で、ユーザーエージェントを使うとした場合でも、実際の方法はいくつもあったりします。しかも、調べてみると結構古い情報ばっかりだったり。
なので、今回のエントリーでは備忘録がてら、「日本の携帯主要3キャリア(DoCoMo / au / Softbank)の現行機種」に絞って、ユーザーエージェントを利用した.htaccessとPHPとJavaScriptそれぞれの、携帯電話orそれ以外の振り分け方法を2010年8月現在の最新バージョンでお届けしたいと思います。
携帯電話の主要3キャリア(DoCoMo / au / Softbank)のユーザーエージェントには、DoCoMoなら”DoCoMo”、auなら”KDDI”、ソフトバンクなら”Vodafone”か”SoftBank”という文字列が含まれています。
少し前であれば、auキャリアの判別には”UP.Browser”という文字列も使われていたのですが、これは当時「HDML(UAに”KDDI”を含まない)」と「WAP2.0(UAに”KDDI”を含む)」という2種類のフォーマットがあった時の名残りであり、現在では「WAP2.0」のみとなっているので、”KDDI”という文字列で見つける方がベターです。
また同様にSoftbankでも、かつては「J-PHONE」という文字列も使われていましたが、これも既に停波済みなので無視しても無問題。
というワケで2010年8月現在、携帯電話の主要3キャリアをユーザーエージェントで判別する場合の検索文字列は、DoCoMoなら”DoCoMo”、auなら”KDDI”、ソフトバンクなら”Vodafone”か”SoftBank”でFAでござるよ。
ここらへん詳しく知りたい方はke-tai.orgさんのこの記事なんかが参考になるかと思います。
サーバ側に.htaccessファイルが置けるなら、素直に.htaccessを使って一括切り分けしちゃうのが一番効率が良い方法かと。
下記は「携帯電話(DoCoMo / au / Softbankの3キャリア)からのアクセスなら、その下層ディレクトリ”/mb/”に強制移動しなさい」という.htaccessの書き方例です。
RewriteEngine On RewriteBase / RewriteCond %{HTTP_USER_AGENT} ^(DoCoMo|KDDI|Vodafone|SoftBank) [NC] RewriteRule ^(.*)$ /mb/ [R]
この4行をコピーして、ファイル名を「.htaccess」として、アクセスされる階層にアップロードすればOK!
ただしwindowsだと、環境によってはこの「.htaccess」という名前でファイルが作れない場合があったりしますので、その時はとりあえず「aaa.htaccess」とかって名前にしといて、アップロード後にFTP上でリネームしちゃってもOKですよ☆
で、このプログラムをカンタンに解説すると、まず1行目でApacheのモジュールのひとつ「Rewrite機能」を”on”にします。
「Rewrite機能」とは、正規表現で指定されたURLのパターンに該当するモノに対して、Apache内部で一括して別のURLに書き換える機能であり、今回はこの機能を使って「ユーザーエージェントが携帯電話のモノだったら、こ こ で は な い ど こ か へリダイレクトしてね(GLAY風)。」という処理を行ってるワケですね。
続く2行目では、書き換えのベースとなるパスを「ルートディレクトリ」に指定しています。ルートディレクトリなので”/”ですね。
で、3行目が本題、ユーザーエージェントによる切り分け部分です。”DoCoMo”、”KDDI”、”Vodafone”、”SoftBank”という4つの文字列のうち、どれかがあったら4行目の処理をお願いね♪という記述です。
最後に4行目、これはURL書き換えのルールを正規表現を使って指定しています。この例の場合だと「どんな名前のファイルへのアクセスでも、全て”/mb/”へのアクセスってコトにしちゃってよマスター☆」とゆー意味になります。
以上で、晴れて.htaccessでの携帯切り分け処理は完遂されるコトでしょう!!
phpで直接ぶっ飛ばす方法は下記。
<?php $ua = $_SERVER['HTTP_USER_AGENT']; if( strpos($ua, 'DoCoMo') || strpos($ua, 'KDDI') || strpos($ua, 'Vodafone') || strpos($ua, 'SoftBank') ){ header("Location: http://飛ばし先のURL"); exit; } ?>
.htaccessと同じように、ユーザーエージェントに該当文言があるかどうかを調べ、文言があった場合は「携帯からのアクセス」とみなして指定したページにぶっ飛ばします。まっすぐ行ってぶっ飛ばします。右ストレートでぶっ飛ばします。
なお、文言の判定方法も色々な関数で代用可能ですが(ereg関数やpreg_match関数など)、ちょろっと調べてみたところ「strpos関数」が一番高速のようなので、上記スクリプトでもソレを使用してます(速度計測に関してはコチラの記事を参考にしました)。
さてさてお次はJavaScriptの出番ですが、そもそも現行機種にはJS使えないモノも多くありますので、さっきのPHPの例とは逆に、「携帯 じ ゃ な か っ た ら 飛ばす」という方法のご紹介。
<script type="text/javascript"><!-- if( navigator.userAgent.indexOf("DoCoMo") == -1 && navigator.userAgent.indexOf("KDDI") == -1 && navigator.userAgent.indexOf("Vodafone") == -1 && navigator.userAgent.indexOf("SoftBank") == -1 ){ location.href = 'http://飛ばし先のURL'; } //--></script>
カンタンな解説でございますが、”navigator.userAgent”とは、ユーザーエージェント文字列を返すプロパティであり、それに続けて.indexOf('○○○')と書くことで、ユーザーエージェント文字列内に'○○○'という文字があればその位置を、文字が見つからなかった場合、”-1”という値を返します。
つーコトで上記は「DoCoMo でも au でも Softbank でもなかったら、、、飛べ!!(魔女の宅急便・キキ風)」と。
なお、携帯電話は前述の通りJSを理解しない機種も多く、ちゃんとコメントアウト(一行目末尾の”<!--”と、10行目冒頭の”//-->”)しとかないとJSの文字列がそのまんま表示されちゃったりしますので、お忘れなく。
まーオマケっちゃーオマケですが、一応PEARにもスグレモノのライブラリがあるのでご紹介しておきます。
詳しい内容や使い方に関しては、コチラの記事なんかがガッツリ参考になりますよ。
使う際にはそこら辺も加味して、上手いコト扱っていきましょー♪
関連する記事
同じカテゴリーの記事
コメントを投稿する