如何使用.htaccess重定向过时的浏览器

时间:2013-04-16 17:36:02

标签: .htaccess redirect browser rewrite obsolete

我尝试了此页面上的所有建议(Using .htaccess to redirect obsolete browsers)但没有成功。我用谷歌搜索,但没有找到一个有效的例子。

在处理具有两位数版本号的浏览器时,这些都不起作用。

例如,下面的行阻止了Opera 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的正确代码是什么?

我做了一些测试,发现了一些奇怪的东西。如果我尝试使用Opera版本11访问该站点,则重写规则在使用以下内容时不情愿地启动:

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无法重定向。

更具体地说,我尝试将某些版本的某些浏览器重定向到特定页面(如果它们符合规则)。这是一个示例,但它不能按预期工作,我认为必须有一种更简洁的方式来编写每个条件:

<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>

2 个答案:

答案 0 :(得分: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>

谢谢Jon Lin!您的代码建议帮助我更好地理解:)

答案 1 :(得分:1)

尝试:

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

看到Opera的用户代理不遵循您期望的格式,只需要这一行来排除Opera 12:

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