mod_rewriteで携帯電話の振り分け

携帯電話の機種判別というのは結構面倒です。
全てをphpやPerl等で処理する方法もありますが…。
ちょっと前のSoftware Design誌にapacheのモジュールmod_rewriteの記事があって、その中で携帯電話の機種振り分けを行っていました。
最近、とっても困ったことにヒマなので、時間潰しに試してみました。
キャリア判別は、User Agentとhttpのヘッダー情報を使います。
User Agentが、DoCoMoで始まればドコモです。
RewriteCond %{HTTP_USER_AGENT} ^DoCoMo/
ヘッダー情報HTTP_X_JPHONE_MSNAMEが、英数字で始まっていればSoftbankです。
RewriteCond %{HTTP:x-jphone-msname} ^[A-Z0-9][A-Z0-9]
ヘッダー情報HTTP_X_UP_DEVCAP_MAX_PDUが、数字で始まっていればauです。
RewriteCond %{HTTP:x-up-devcap-max-pdu} ^[0-9][0-9]
これらの条件にマッチすれば、携帯用のディレクトリにリダイレクトします。
それ以外は、PCにしてしまっても良いでしょう。ウィルコムをどうするか?というのはありますが…
余談ながら、User AgentにUP.Browserがあったらau端末と振り分ける場合があるようですが、Softbankの一部の端末のUser AgentにもUP.Browserが含まれていますので要注意です。
ここからさきは、どこまで細分化するかです。
例えば、ドコモだと、初期のFOMAを除けば、xhtmlに対応しています。xhtmlに対応していることよりも、tableタグが使えることのほうが大きいですかね。
また、表示画面サイズもimode初期の機種と、最近の機種では全然違います。写真を掲載する場合は、画像サイズは端末の画面サイズにあわせたいところです。
ソフトバンクも、最近の3G端末は、xhtmlが使えます。画像サイズについては、ドコモと同じです。
auの場合は、端末の世代によって、HDMLとxhtmlがあります。xhtml対応端末では、画像サイズの問題があります。
auのHDML端末、ドコモの505以前のムーバ端末、ソフトバンクの以前のJ-PhoneブランドやVodafone初期の端末は、切り捨ててしまっても良いようにも思いますが。。
画面サイズについては、ドコモは、機種名から判別するしかありません。
ソフトバンクはHTTP_X_JPHONE_DISPLAYから、auはHTTP_X_UP_DEVCAP_SCREENPIXELSから取得できますので、こちらはわりと単純です。
このようなことを試行錯誤していたら、URL書き換えのルール部分だけで100行近くになってしまいました。
さて、古い端末を持ってないんですが、どうやってテストしようか(笑)
ちなみに、この100行近い書き換えルールには、Flash対応端末の判別が含まれていません。
Flashについては、機種判別のための情報を持っていません。
au端末だと、おそらくは、HTTP_X_UP_DEVCAP_MULTIMEDIAのどこかを見れば判別可能だと思います。が、どれを見ればいいかわかりません。
ドコモについては、機種名で判別するしかないようです。Softbankについては、対応機種すらわかりません。オフィシャルCPだったら、情報が開示されているんでしょうけど。
ところで、mod_rewriteについて書かれているサイトの中には、RewriteRuleに¥dや¥wといった特殊文字を使っている例がありあすが、これは正しいんでしょうか?どうも正常に動いてくれません。apache 2.xだと使えるのかな?
http://httpd.apache.org/docs/1.3/misc/rewriteguide.html
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
には、使えるとも、使えないとも書かれてないません。明記されていないから使えないのか、明記されてなけど使えて当然なのかは、僕にはわかりませんが。
追記
その後ネット上の情報を調べていたら、HTTP_ACCEPTの中に“application/x-shockwave-flash”があるかどうかで、flash対応を判別する方法が書かれていました。
ただし、この方法では、どのバージョンのFlash Liteに対応しているかまではわからないですかね。

カテゴリー: サーバーまわり パーマリンク