【问题标题】:How to use .htaccess to redirect obsolete browsers如何使用 .htaccess 重定向过时的浏览器
【发布时间】:2013-04-16 17:36:02
【问题描述】:

我尝试了此页面 (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>

【问题讨论】:

    标签: .htaccess redirect browser rewrite obsolete


    【解决方案1】:

    下面的代码做我想要的:

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

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

    【讨论】:

    • 只有当你没有重定向“www2.mysite.com”的访问者时它才会起作用。如果您想在同一网站内使用此重定向,则需要排除此页面以避免重定向循环。使用“RewriteCond %{REQUEST_URI} !^www2.mysite.com/page.php [NC]”
    【解决方案2】:

    试试:

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

    查看 Opera 的用户代理如何不遵循您期望的格式,只需要此行来排除 Opera 12:

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

    【讨论】:

    • 您能解释一下版本号部分 (1[10]|[1-9]) 的工作原理吗?我也需要将此条件应用于不同浏览器的不同版本。
    • @Jeff () 部分提供了两个由| 字符分隔的选项。第一个是1[10],另一个是[1-9]。第一个匹配 1011,第二个匹配 19。所以两者结合起来,它匹配 111
    • @Jeff 它不起作用,因为Opera version 12 gives a User-Agent string of Opera/9.80。您需要对要匹配的内容进行更多研究
    • @Jeff 正如您在提供 Opera V12 用户代理的链接中所见,它有一个 Version/12. 字符串,那么为什么不直接匹配呢?如RewriteCond %{HTTP_USER_AGENT} Opera [OR] RewriteCond %{HTTP_USER_AGENT} !Version/12\.?
    • 对不起。我没有意识到 Opera 的 UA 是这样设置的。现在一切都变得更有意义了。我编辑了我的原始帖子以显示我想要完成的事情。如何编写条件以便重定向低于我指定的版本(例如 Opera 10.1)?抱歉,我一开始不太清楚。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多