8

訪問者が使用しているブラウザに基づいて、訪問者を特定のページにリダイレクトしたいと考えています。

例: すべての訪問者は最初にhttp://www.example.com/xy/abc.htmlにアクセスします。

訪問者が Firefox を使用している場合、 http://www.example.com/xy/firefox.htmlにリダイレクトされます。

訪問者がクロムを使用している場合、http://www.example.com/xy/chrome.htmlにリダイレクトする必要があります。

Opera、chrome、firefox、IE、safari ブラウザーでこれを処理し、識別されていないブラウザーのデフォルトのリダイレクトを使用したいと考えています。

コードの助けはありますか?調べてみたところ、特定のブラウザではなく、すべてのブラウザの単一のリダイレクト コードしか見つかりませんでした。

あなたの助けに感謝します。ありがとう。

4

2 に答える 2

15

mod_rewrite のRewriteCond ディレクティブを使用して、報告されたユーザー エージェントの名前に対してテストできます。xy ディレクトリに配置された .htaccess ファイルでは、次のようになります。

RewriteCond %{HTTP_USER_AGENT} Opera
RewriteRule ^abc.html$ http://example.com/xy/opera.html [R=301]

これにより、ユーザー エージェント文字列のどこかに Opera が含まれるブラウザーが、opera.html に永続的にリダイレクトされます。useragentstring.comで、ユーザー エージェントが自分自身を識別する方法の適切なリストを見つけることができます。多くのユーザー エージェント文字列が実際には "Mozilla" で始まることに気付くでしょう (いくつかの邪悪な歴史的理由による) が、文字列にブラウザーの名前 (IE は "MSIE") が含まれているかどうかをテストするだけで十分です。

問題は、HTTP_USER_AGENT文字列がブラウザによって報告され、ブラウザが必要なものをほとんど報告する可能性があることです。Opera には、自分自身を IE または FF に見せかける組み込みオプションもあります。一般に、ユーザー エージェント文字列に基づくブラウザー スニッフィングが最終的に見逃される可能性が高く、ユーザーはイライラします。自動リダイレクトをオーバーライドする方法をユーザーに残すことを強くお勧めします。


したがって、次のようなものが最初のアプローチとして機能する可能性があります。

RewriteEngine on

RewriteCond %{HTTP_USER_AGENT} Opera
RewriteRule ^abcd.html$ opera.html [NC,L]

RewriteCond %{HTTP_USER_AGENT} MSIE
RewriteRule ^abcd.html$ ie.html [NC,L]

RewriteCond %{HTTP_USER_AGENT} Chrome
RewriteRule ^abcd.html$ chrome.html [NC,L]

RewriteCond %{HTTP_USER_AGENT} Safari
RewriteRule ^abcd.html$ safari.html [NC,L]

RewriteCond %{HTTP_USER_AGENT} Firefox
RewriteRule ^abcd.html$ firefox.html [NC,L]

RewriteRule ^abcd.html$ default.html [L]

L フラグは、そのルールがそのパスで最後に実行されることを確認するため、ブラウザが Firefox、Safari、MSIE、および Opera を含む文字列で自身を報告した場合、一致する最初のルール (この場合は Opera) が決定されます。ランディングページ。このバージョンは、ソフト リダイレクトを実行します (ブラウザのアドレス バーは変更されません)。ハードな R=301 リダイレクトが必要な場合は、ランディング ページの URL 全体を綴るようにしてください。RewriteRule ^abcd.html$ http://example.com/xy/opera.html [NC,L,R=301]

于 2012-12-27T16:30:43.960 に答える