WebサイトでiPhoneのユーザーエージェントを判定してスマートフォンに最適化されたページを表示したいってことありますよね。

簡単にググってみると"iPhone"という文字をフィルターすれば良いと出てきます。

ApacheでやるならBrowserMatchでこんな感じに書く感じでしょうか。

BrowserMatch "iPhone" lite

が、最近これだと駄目なケースに出会いました。

iPadに入れているfacebookアプリから、シェアされたリンクを辿ってWebViewで開くと、以下のようなユーザーエージェントで来ます。

Mozilla/5.0 (iPad; CPU OS 6_0_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10A550 [FBAN/FBIOS;FBAV/5.3;FBBV/89182;FBDV/iPad2,5;FBMD/iPad;FBSN/iPhone OS;FBSV/6.0.2;FBSS/1; FBCR/;FBID/tablet;FBLC/ja_JP]

途中にiPhoneという文字列があるせいで、iPadで見てもスマートフォン向けのページに行ってしまいます。

これを回避するのには、以下のように前後を含めて上げれば良さそうです。

BrowserMatch "\(iPhone;" lite

これだけだと、以下の様なiPod touchのUAがヒットしなくなってしまうので

Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_1 like Mac OS X; zh-cn) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8G4 Safari/6533.18.5

iPodのケースも追加して

BrowserMatch "\(iPhone;" lite
BrowserMatch "\(iPod;" lite

とするのが良いようです。他にこのケース抜けてるよ!とかあれば教えてください。