2012-12-27 13 views
6

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

たとえば、すべての訪問者はまずhttp://www.example.com/xy/abc.htmlにアクセスします。私はオペラのためにこれを処理したいの訪問者は、Firefoxを使用している場合、彼は訪問者がクロムを使用している場合、彼はhttp://www.example.com/xy/chrome.html

にリダイレクトされなければならないhttp://www.example.com/xy/firefox.html

にリダイレクトする必要があります

、クロム、Firefoxの、 IE、Safariブラウザ、および特定されていないブラウザの既定のリダイレクトが含まれます。

コードに関するヘルプはありますか?私は見上げてみましたが、私が見つけたのは特定のブラウザではなくすべてのブラウザのための単一のリダイレクトコードでした。

あなたのお手伝いがありがとうございます。ありがとう。

答えて

11

mod_rewriteのRewriteCond directiveを使用して、報告されたユーザーエージェントの名前に対してテストすることができます。あなたのxyディレクトリに置かれた.htaccessファイルでは、次のようになりたい:これは恒久的にopera.htmlする彼らのユーザーエージェント文字列のどこかにオペラを持っているブラウザをリダイレクトします

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

。ユーザーエージェントが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]

+0

)を必ず入力してください。私は実際にそれがいくつかのユーザーにとって失敗するかどうかについてはあまり心配していません。実際には100%の実用的なソリューションは期待していませんが、85%に近いものは問題ありません。 – vinny

+0

明確にするために、私はこのコードをまとめましたが、これはあなたによく見えますか?
RewriteCond %{HTTP_USER_AGENT} Opera RewriteRule ^abc.html$ opera.html [R=301] RewriteCond %{HTTP_USER_AGENT} Mozilla RewriteRule ^abc.html$ ff.html [R=301]
もう1つの問題は、chromeもMozillaを使用したことです。これは、chromeユーザーにとってリダイレクトが正確ではないことを意味します。 – vinny

+0

サンプル実装を追加しました。私のマシンで動作するようですが、テストしてください:)。 –

関連する問題