あーあー昨今デバイスが多様化してさまざまな状況への対応が求められてきています。今回はユーザ環境に合わせてコンテンツを切り分ける際のメモです。
ユーザエージェントでのデバイスの振り分けのメモ。
PC、タブレット、スマホ、タブレットを.htaccessでふり分ける。

※ユーザエージェントは簡単に偽装が可能なので、セキュリティーなどのシステム重要な部分での利用については十二分な検討が必要です。
※2012年2月現在なので情報が古い可能性があります。

スマートフォンをApacheのmod_rewriteモジュール(.htaccess)で振り分け

スマホを振り分けるばぁい。
/s/以下へリダイレクトのコード(もっといい方法ありそうだけどなぁ。。)

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} !iPad
RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|PDA|BlackBerry|Windows\ Phone)
RewriteCond %{REQUEST_URI} !/s/
RewriteCond %{REQUEST_URI} !\.js$
RewriteRule ^(.*)$ /s/$1 [R,L]

RewriteCond %{HTTP_USER_AGENT} Android
RewriteCond %{HTTP_USER_AGENT} Mobile
RewriteCond %{REQUEST_URI} !/s/
RewriteCond %{REQUEST_URI} !\.js$
RewriteRule ^(.*)$ /s/$1 [R,L]

上から順に、

RewriteEngine On 
→ リライト開始

RewriteCond %{HTTP_USER_AGENT} !iPad 
→iPadの文字がユーザエージェントに含まれない 且つ

RewriteCond %{HTTP_USER_AGENT} (iPhone|iPod|PDA|BlackBerry|Windows\ Phone) 
→()の中の指定文字がユーザエージェントに含まれる 且つ (a|b)の書き方は、aまたはbの意味。今回はiPhoneまたは、iPosまたは、PDFまたは・・・・Windows Phoneが含まれる場合はとの意味

RewriteCond %{REQUEST_URI} !/s/ 
→今のページのURLに「/s/」の文字が入っていない場合は (!ビックリマークは否定の意味)

RewriteRule ^(.*)$ /s/$1 [R,L] 
→「/s/」以下へリライト。(「$1」っていうのはいま指定されたファイルの事)

RewriteCond %{HTTP_USER_AGENT} Android 
→「Android」の文字がユーザエージェントに含まれる 且つ

RewriteCond %{HTTP_USER_AGENT} Mobile 
→ 「Movile」の文字がユーザエージェントに含まれる 且つ (タブレットはMobileの文字が入っていない事が多いらしい)

RewriteCond %{REQUEST_URI} !/s/ 
→今のページのURLに「/s/」の文字が入っていない場合は (!ビックリマークは否定の意味)

RewriteRule ^(.*)$ /s/$1 [R,L]
→「/s/」以下へリライト。(「$1」っていうのはいま指定されたファイルの事)

携帯電話をApacheのmod_rewriteモジュール(.htaccess)で振り分け

スマホを振り分けるばぁい。
/m/以下へリダイレクトのコード

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (DoCoMo|J-PHONE|Vodafone|SoftBank|MOT-|KDDI|UP.Browser|DDIPOCKET|L-mode|WILLCOM)
RewriteCond %{REQUEST_URI} !/m/
RewriteRule ^(.*)$ /m/$1 [R,L]

上から順に、

RewriteEngine On
→ リライト開始

RewriteCond %{HTTP_USER_AGENT} (DoCoMo|J-PHONE|Vodafone|SoftBank|MOT-|KDDI|UP.Browser|DDIPOCKET|L-mode|WILLCOM)
→ 上のうちどれかがユーザエージェントに含まれている。 且つ

RewriteCond %{REQUEST_URI} !/m/
→今のページのURLに「/m/」の文字が入っていない場合は (!ビックリマークは否定の意味)

RewriteRule ^(.*)$ /m/$1 [R,L]
→「/m/」以下へリダイレクト