[PHP][mod_rewrite]ユーザーエージェントでPCとケータイを判別

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[PHP][mod_rewrite]ユーザーエージェントでPCとケータイを判別

HTTP_USER_AGENTの文字列を判断して、PCからのアクセスなのかケータイからのアクセスなのかを判別するというのは、広く使われているテクニック。

例えばDoCoMoのケータイならば、ユーザーエージェントの先頭に必ずDoCoMoの文字列が入ることになっているから、それを見てドコモのケータイだと判断すればよい。

先ほど、各キャリアのユーザーエージェントを調べたのでメモ。

各キャリアのHTTP_USER_AGENT

各キャリアのユーザーエージェントは、必ず次の文字を含む。

DoCoMo
DoCoMo
KDDI (au, Tu-Ka)
UP.Browser
SoftBank (including J-PHONE, Vodafone)
J-PHONE
Vodafone
SoftBank

DoCoMo, au, SoftBankはカバーしているが、他にカバーすべきキャリアはあるだろうか?

正規表現

従って、HTTP_USER_AGENTが次の正規表現パターンにマッチしたときは携帯電話からのアクセスだと判断できる。

DoCoMo|UP.Browser|J-PHONE|Vodafone|SoftBank

auのUP.Browser以外はみんなユーザーエージェントの先頭。だから、↓でもいいのかも。

^DoCoMo|UP.Browser|^J-PHONE|^Vodafone|^SoftBank

実例

PHPでは↓

<?php

$ua = $_SERVER['HTTP_USER_AGENT'];

if (preg_match('/DoCoMo|UP.Browser|J-PHONE|Vodafone|SoftBank/i', $ua)) {
    //ケータイ
} else {
    //PC
}

念のため大文字と小文字の区別をなくしています。

Perlなら↓

#!perl

$ua = $ENV{'HTTP_USER_AGENT'};

if ($ua =~ /DoCoMo|UP.Browser|J-PHONE|Vodafone|SoftBank/i) {
    #ケータイ
} else {
    #PC
}

Perlはあまり得意ではないので間違ってたらごめんなさい。

mod_rewriteなら↓

RewriteEngine on

#ケータイならmobile.htmlに書き換える
RewriteCond %{HTTP_USER_AGENT} DoCoMo|UP.Browser|J-PHONE|Vodafone|SoftBank [NC]
RewriteRule !^mobile.html mobile.html [L]

間違いなどがあったらご指摘ください。

スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/50-ef9559a2

トラックバック

コメント

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。