2012年07月07日

iモードブラウザ1.0からのアクセスを別のページにリダイレクトするための.htaccessの記述

現在制作中の携帯サイトについて、外部CSSに対応しているAU、SBおよびdocomoのi-modeブラウザ2.0機種以外、つまりDocomoのi-mode1.0からのアクセスだけを別ページにリダイレクトするための.htaccessの書式です。
外部CSSに対応している機種はそのまま、外部CSSを読み取れないi-mode1.0以前のdocomo端末はすべて別ページに飛ばそうという考えです。
テスト用のWebサーバはローカルネットワーク内のApache2.2、携帯サイトのドキュメントは/mobile/ 以下、i-mode1.0からのアクセスのリダイレクト先は/mobile/i/ 以下、という設定です。
このサーバに携帯電話からアクセスすることはできませんので、ローカルネットワーク上のPCにFirefox用のアドイン「FireMobileSimulator」をインストール、ユーザーエージェントを携帯端末に偽装してアクセスします。なお、ユーザーエージェントは「FireMobileSimulator」のオプション設定で適宜修正しています。

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} DoCoMo/1.0 [OR]
RewriteCond %{HTTP_USER_AGENT} DoCoMo/2.0.*c100|c10
RewriteRule ^$ http://xxxxxx/mobile/i/ [R]

2行目、DoCoMo/1.0とはどうやらmova端末のようで、movaは2012年3月31日限りでサービスが終了しているようなのでなくてもよさそうですが、とりあえず入れときます。
3行目、FOMA端末のi-modeブラウザ1.0と2.0の判別方法は、キャッシュサイズが100KB以下かそれ以上かのだそうで、これで悩みました。
.htaccessは正規表現が使えると知ったので、いろいろ試行錯誤の結果(正規表現は・・・なので)、文字も数字も記号も全部ひっくるめられる「.*」を使って収めました。キャッシュサイズはほぼ全機種がc100の記述ですが、1機種だけc10の端末があり、「|」を使ってみました。

これでローカルネットワーク上のPCから「FireMobileSimulator」経由でサーバにアクセス、該当の端末でのアクセスでi-mode1.0端末用のURLにリダイレクトされることを確認しました。
Apacheのaccess.logは以下の通り(一部省略しています)。

Firefoxから
"GET /mobile/ HTTP/1.1" 200 2978 "-" "Mozilla/5.0 (Windows NT 6.1; rv:9.0.1) Gecko/20100101 Firefox/9.0.1"
docomo F-02D(FOMA、i-mode2.0)から
"GET /mobile/ HTTP/1.1" 200 2978 "-" "DoCoMo/2.0 F02D(c500;TB;W24H16)(c500;TB;W24H12)"
docomo N504i(mova、i-mode1.0)から
"GET /mobile/ HTTP/1.1" 302 213 "-" "DoCoMo/1.0/N504i/c10/TB/c10/TB/W24H12"
"GET /mobile/i/ HTTP/1.1" 200 2761 "-" "DoCoMo/1.0/N504i/c10/TB/c10/TB/W24H12"
docomo N2001(FOMA、i-mode1.0)から
"GET /mobile/ HTTP/1.1" 302 213 "-" "DoCoMo/2.0 N2001(c10)(c10;TB;W24H12)"
"GET /mobile/i/ HTTP/1.1" 200 2761 "-" "DoCoMo/2.0 N2001(c10)(c10;TB;W24H12)"
docomo N06B(FOMA、i-mode1.0)から
"GET /mobile/ HTTP/1.1" 302 213 "-" "DoCoMo/2.0 N06B(c100;TB;W24H16)(c100;TB;W24H12)"
"GET /mobile/i/ HTTP/1.1" 200 2761 "-" "DoCoMo/2.0 N06B(c100;TB;W24H16)(c100;TB;W24H12)"

この振り分けはあくまで http://xxxxxx/mobile/ にアクセスした場合にのみ有効で、
/mobile/index.html → /mobile/i/index.html
/mobile/new.html → /mobile/i/new.html
といった振り分けはできません。公表するのは http://xxxxxx/mobile/ だけだから個別のファイルへのアクセスまで対応しなくてもいいかな、と思いつつも何とかしたいな、とは思っています。



それにしても、わざわざこんな振り分けをしなくてはいけないような旧docomoのダメダメな仕様には本当に腹が立ちます(以下愚痴です)。

外部CSSに非対応なのはまだ許せるにしても、i-mode1.0で使えるプロパティの少なさには今も泣かされてます。
特にmarginがほぼ完璧に使えない、というのは拷問に近いです。インデントや一行空けのために、テーブルを使ったりbrタグを付け加えたり、コードがめちゃくちゃ汚くなりました。苦労した割に出来上がりは他のキャリア向けページと比べると、思わず頭を抱えてうなだれてしまうほどひどいです。

ユーザーエージェントの命名方法にも問題があるし。
どうして新旧のブラウザがどちらも「DoCoMo/2.0」なのか。
外部CSSへの対応以外にもJavaScript対応など、内容的に i-mode1.0 → 2.0 の仕様変更はかなりの大事だと思うんですよ。
2.0でできるけど1.0でできないことは数多くありますので、両方に対応(=下位互換)では2.0で使用可能な技術の導入が停滞します。2.0の機能をフルに使うためにサーバ側で対応端末を選別するのは開発者にとっては選択肢の一つになりますし、ユーザーにとっても親切なことだと思います。
ちょっと気を利かせてくれるだけでずいぶん多くの人がいい思いできただろうに、何でドコモの連中はここに思いが至らなかったのか、あるいは手を付けなかったのか。大きい会社とはいえ、謎すぎます。


続き書きました。こちらです。




posted by nambei-x at 22:24| Comment(0) | TrackBack(0) | PC・ネット関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.seesaa.jp/tb/276648654
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。