0

我尝试了此页面上的所有建议(使用 .htaccess 重定向过时的浏览器),但都没有奏效。我用谷歌搜索但没有找到一个可行的例子。

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

例如,下面的行阻止了 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>
4

2 回答 2

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>

谢谢乔恩林!您的代码建议帮助我更好地理解了一点:)

于 2013-04-17T02:16:35.250 回答
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]
于 2013-04-16T18:22:36.057 回答