Own products

  • 新規事業のアイディア創造機

Tutorial

2010
08/10

ユーザーエージェントで携帯電話(主要3キャリア)とそれ以外を振り分ける方法、まとめてみました。

この記事の読了時間:約710

  • このエントリーをはてなブックマークに追加

携帯電話からのアクセスと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ファイルが置けるなら、素直に.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で直接ぶっ飛ばす方法は下記。

<?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の場合

さてさてお次は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のライブラリ

まーオマケっちゃーオマケですが、一応PEARにもスグレモノのライブラリがあるのでご紹介しておきます。

Net_UserAgent_Mobile

詳しい内容や使い方に関しては、コチラの記事なんかがガッツリ参考になりますよ。

ユーザーエージェントはカンタンに偽装できるので、お手軽で使い勝手が良い反面、シビアな判別には不向きなモノ。

使う際にはそこら辺も加味して、上手いコト扱っていきましょー♪

  • このエントリーをはてなブックマークに追加

コメントを投稿する

お名前

ご連絡先メールアドレス※非公開

コメント

  • このブログのRSSを購読する
  • このブログをtwitterでつぶやく
  • このブログをFacebookで共有する
  • このブログをはてなブックマークで共有する

Contact

お名前※必須

ご連絡先メールアドレス

お問い合わせ内容※必須

CAPTCHA

captcha

Blog parts

Affiliate