web-dev-qa-db-ja.com

iPhone / Androidブラウザーをm.example.comにダイレクトするにはどうすればよいですか?

HTML5ブラウザー(単純な地理位置情報)でのみ機能する特別なコーディングがあります。 iPhoneおよびAndroidユーザーをm.example.comバージョンのWebサイトにリダイレクトしたい。これを行う最良の方法はどのようなものですか?

8
JoshFinnie

userAgent検出を使用するか、jQuery.support()を使用できます。特定の機能を探しているので、2つを組み合わせて必要なものを取得できます。

実際、UserAgentが最善の策かもしれません。 .htaccessファイルを使用してこれを行い、httpリクエストを削減します。接続が遅い場合やJavaScriptのパフォーマンスが遅い場合は、リダイレクトの前にメインサイトをフラッシュします。

wikipediaページ でモバイルユーザーエージェントの(ほぼ)完全なリストを見ることができます。ご覧のとおり、正規表現で検索できる製造元とバージョンには類似点があります。

2
helloandre

あなたの質問は2つの部分に触れます..リダイレクトとhtml5の互換性。

リダイレクト

私は次の.htaccessを使用しています:

RewriteCond %{HTTP_ACCEPT} "text\/vnd\.wap\.wml|application\/vnd\.wap\.xhtml\+xml" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "sony|symbian|nokia|samsung|mobile|windows ce|epoc|opera" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "mini|nitro|j2me|midp-|cldc-|netfront|mot|up\.browser|up\.link|audiovox" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "blackberry|ericsson,|panasonic|philips|sanyo|sharp|sie-" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "portalmmm|blazer|avantgo|danger|Palm|series60|palmsource|pocketpc" [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "smartphone|rover|ipaq|au-mic,|alcatel|ericy|vodafone\/|wap1\.|wap2\.|iPhone|Android" [NC]
RewriteRule ^(.*)$ http://m.example.com/ [L,R=302]

PHPの場合、このライブラリを使用できます: http://detectmobilebrowsers.mobi/ ...しかし、処理時間とセキュリティのためにhtaccessを使用することを強くお勧めします。

ここにいくつかの追加の例を見つけることができます

http://ohryan.ca/blog/2009/02/18/revisiting-mobile-redirection-using-htaccess-rewrite-rules/

ブラウザ機能

私のAndroid電話は、位置情報コードを含むhtml5で問題ありません。 Modernizr Javascript Library を使用して、ページにアクセスするクライアントブラウザーの機能を検出することを検討できます。

優れた HTML5ボイラープレート テンプレートは、この種のニーズをサポートするためにすぐにmodernizrを使用しています。

私の意見は、modernizrがサポートする最近の携帯電話とブラウザを除くすべてにhtaccessメソッドを使用し、AndroidおよびiPhoneユーザーがhtml5機能サポートについてModernizrによってチェックされ、ジオロケーションなし」バージョン。

Modernizrの例:

 if (Modernizr.geolocation) {
    // do stuff
 }else{
    // propose mobile version 
 }

お役に立てれば

2
jflaflamme

PHPを使用してコーディングしている場合、$_SERVER['HTTP_USER_AGENT']を使用してUserAgentヘッダーを確認できます。これは、ほとんどの主要なモバイルデバイスからPHPスクリプトに送信されます。次に、このヘッダーの値をsubstr fuctionと比較して、内部に必要なものと比較します。

たとえば、Appleデバイスには常に「iphone」または「ipad」のサブストリングがあります。 Androidデバイスには常に「Android」があります。ほとんどすべてのモバイルデバイスには、このヘッダーに「モバイル」サブストリングがリストされます。

1
Paul Pi