2013-04-16 74 views
0

我嘗試了此頁面上的所有建議(Using .htaccess to redirect obsolete browsers),但沒有任何工作。我用Google搜索了一下,但沒有找到一個可行的例子。如何使用.htaccess重定向過時的瀏覽器

在處理帶有兩位數字版本號的瀏覽器時,這些工作都不起作用。

例如,下面塊歌劇v.1.x和Opera v.12.x行:

RewriteCond %{HTTP_USER_AGENT} "Opera/1\." [NC,OR] 

的代碼下面沒有工作,要麼:

RewriteCond %{HTTP_USER_AGENT} "Opera/[1-11]\." [nc,or] 
RewriteCond %{HTTP_USER_AGENT} "Opera/[1-9][0-1]?\." [nc,or] 

有什麼正確的代碼重定向Opera版本1.x-11.x?

我做了一些更多的測試,發現了一些對我來說很奇怪的東西。

RewriteCond %{HTTP_USER_AGENT} "Opera/9\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/8\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/7\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/6\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/5\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/4\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/3\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/2\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/1\." [NC,OR] 

如果我只是註釋掉...

RewriteCond %{HTTP_USER_AGENT} "Opera/9\." [NC,OR] 

...歌劇院:如果我嘗試使用Opera 11版訪問該網站,重寫規則使用以下時,勉強踢瀏覽器版本11不會重定向。

更具體地說,我試圖將某些瀏覽器與某些版本重定向到特定頁面,如果它們符合規則。下面是一個簡單,但它並不像預期的那樣,我認爲一定是寫每個條件更簡潔的方式:

<ifmodule mod_rewrite.c> 
RewriteEngine on 
RewriteCond %{HTTP_USER_AGENT} "Firefox/3\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Firefox/2\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Firefox/1\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/9\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/8\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/7\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/6\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/5\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/4\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/3\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/2\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/1\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "MSIE 7\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "MSIE 6\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "MSIE 5\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "MSIE 4\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "MSIE 3\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "MSIE 2\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "MSIE 1\." [NC] 
RewriteRule . http://www2.mysite.com/page.php [L] 
</ifmodule> 

這裏就是我想要做的事:

<ifmodule mod_rewrite.c> 
RewriteEngine on 
RewriteCond %{HTTP_USER_AGENT} "Firefox/if less than version 3\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/if less than version 10.1\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "MSIE if less than version 7\." [NC] 
RewriteRule . http://www2.mysite.com/page.php [L] 
</ifmodule> 

回答

3

下面的代碼我想要做什麼:

<ifmodule mod_rewrite.c> 
RewriteEngine on 
RewriteCond %{HTTP_USER_AGENT} "Firefox/[1-3]\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} Opera/9\..*Version/(1[10]|[1-9])\. [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "Opera/[1-8]\." [NC,OR] 
RewriteCond %{HTTP_USER_AGENT} "MSIE [1-7]\." [NC] 
RewriteRule . http://www2.mysite.com/page.php [L] 
</ifmodule> 

謝謝喬恩·林!你的代碼建議有助於我理解一點點:)

+0

只有當您沒有重定向「http://www2.mysite.com」的訪問者時,它纔會有效。如果您想在同一網站中使用此重定向,則需要排除此頁面以避免重定向循環。使用「RewriteCond%{REQUEST_URI}!^ www2.mysite.com/page.php [NC]」 –

1

嘗試:

RewriteCond %{HTTP_USER_AGENT} Opera/(1[10]|[1-9])\. [NC,OR] 

看到如何Opera的用戶代理並不意味着你所期望的格式,只需要這一行排除運時代12:

RewriteCond %{HTTP_USER_AGENT} !Opera/9\..*Version/12\. [NC,OR] 
+0

你能解釋一下版本號部分(1 [10] | [1-9])是如何工作的嗎?我需要將這個條件應用於不同版本的不同瀏覽器。 – Jeff

+0

@Jeff'()'部分給出了用'|'字符分隔的兩個選項。第一個是'1 [10]',另一個是'[1-9]'。第一場比賽** 10 **或** 11 **,第二場比賽** 1 **至** 9 **。所以兩者結合,它匹配** 1 **到** 11 **。 –

+0

不起作用。還阻止Opera v.12.x. – Jeff

相關問題