8

我想根据他们使用的浏览器将访问者重定向到我的特定页面。

例如:所有访问者都会首先访问http://www.example.com/xy/abc.html

如果访问者使用的是 firefox,他应该被重定向到http://www.example.com/xy/firefox.html

如果访问者使用的是 chrome,他应该被重定向到http://www.example.com/xy/chrome.html

我想为opera、chrome、firefox、IE、safari浏览器处理这个问题,并为未识别的浏览器提供默认重定向。

对代码有帮助吗?我试着查找,我发现所有浏览器都是一个重定向代码,而不是一个特定的。

感谢您的帮助。谢谢。

4

2 回答 2

15

您可以使用 mod_rewrite 的RewriteCond 指令来测试报告的用户代理名称。在放置在 xy 目录中的 .htaccess 文件中,它看起来像这样:

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

这会将在其用户代理字符串中某处包含 Opera 的浏览器永久重定向到 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]

于 2012-12-27T16:30:43.960 回答
0

以下重写规则将对 tecmint.html 的请求重定向到 tecmint-chrome.html、tecmint-firefox.html 或 tecmint-ie.html,具体取决于所使用的浏览器(Google Chrome、Mozilla Firefox 或 Internet Explorer)。

为此,HTTP_USER_AGENT 环境变量用于根据用户代理字符串识别浏览器。这里我们介绍 RewriteCond 指令,它允许我们指定一个必须满足的条件才能进行重定向。

RewriteCond "%{HTTP_USER_AGENT}"  ".*Firefox.*"
RewriteRule "^/tecmint\.html$"      "/tecmint-firefox.html" [R,L]
RewriteCond "%{HTTP_USER_AGENT}"  ".*Chrome.*"
RewriteRule "^/tecmint\.html$"      "/tecmint-chrome.html" [R,L]
RewriteCond "%{HTTP_USER_AGENT}"  ".*Trident.*"
RewriteRule "^/tecmint\.html$"      "/tecmint-ie.html" [R,L]

参考:https ://www.tecmint.com/mod_rewrite-redirect-requests-based-on-browser/

于 2020-12-22T18:25:29.863 回答