モバイルのユーザーエージェントには信じられないほどの違いがあるため、nginx 構成よりもコードリダイレクトを使用する方がはるかに優れています。if
特に、 nginx で一連のステートメントを呼び出すコストは取るに足らないものです。
この Web サイトには、古いものからそれほど古いものまで、モバイル ユーザー エージェントの非網羅的なリストがあります。控えめに言っても、リストが実際には非常に巨大であることがすぐにわかります。ここでは、iPhone、iPod、および iPad だけに注目しましょう。それらは非常に簡単に区別できます。
Mozilla/5.0 (デバイスタイプ; cpu タイプ; Mac OS X のような CPU; en) AppleWebKit/420+ (Gecko のような KHTML) バージョン/3.0 Mobile/1A543a Safari/419.3
したがって、これは問題になりません。ただし、文字列は、Safari のデスクトップ ユーザー エージェントを含む他のものと非常によく似ています...そして、これは最も簡単な電話用です。Android にはそのような単純さはありません。たとえば、HTC Desire を見てみましょう。
Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (Gecko のような KHTML) バージョン/4.0 Mobile Safari/530.17
OS の識別子が 3 番目のフィールドに変更されました。つまり、iPhone と一部の Android を照合するには、少なくとも 2 つの正規表現エンジン呼び出しが必要になりました。Motorola Droid に行きましょう:
MOT-V9mm/00.62 UP.Browser/6.2.3.4.c.1.123 (GUI) MMP/2.0
……わぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ
結論: 誤検知が気になる場合は、ユーザー エージェントのデータベースが必要になります。そうでない場合は、ユーザー エージェントで正規表現を使用して nginx の広範なチェックを行い、キーワード iPad、iPhone、iPod、Android、Windows Phone を検索します。これにより、全モバイル ユーザーの約 80 ~ 85% にフラグが立てられます。全員に一致させたい場合は、メーカーがユーザー エージェントを書き直すため、ユーザー エージェントの DB を使用する必要があります。