2012-12-27 103 views
6

我想根據用戶使用的瀏覽器將訪問者重定向到我的特定頁面。.htaccess根據瀏覽器重定向到特定網頁

例如:所有訪問者將首先訪問http://www.example.com/xy/abc.html

如果訪問者使用Firefox的,他應該被重定向到http://www.example.com/xy/firefox.html

如果使用鉻訪客,他應該被重定向到http://www.example.com/xy/chrome.html

我要處理這個歌劇,鉻,火狐, IE瀏覽器,safari瀏覽器以及默認瀏覽器的默認重定向。

任何幫助代碼?我試過了,我發現所有瀏覽器都只有一個重定向代碼,而不是特定的瀏覽器。

您的幫助表示讚賞。謝謝。

回答

11

您可以使用mod_rewrite的RewriteCond directive根據報告的用戶代理名稱進行測試。在放置在你的XY目錄.htaccess文件,它會是這樣的:

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

這將永久重定向,在他們的用戶代理字符串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]

+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]
另一個問題,chrome也使用Mozilla,這意味着重定向對於chrome用戶來說是不準確的。 – vinny

+0

添加了示例實現。似乎在我的機器上工作,但一定要測試它:)。 –

相關問題