apache - .htaccess 根据浏览器重定向到特定网页

标签 apache .htaccess webserver

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

例如:所有访问者都会先访问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 浏览器处理这个问题,并为未识别的浏览器使用默认重定向。

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

感谢您的帮助。谢谢。

最佳答案

您可以使用 mod_rewrite 的 RewriteCond directive根据报告的用户代理名称进行测试。在 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]

关于apache - .htaccess 根据浏览器重定向到特定网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14057575/

相关文章:

apache - apache tomcat 中的奇怪临时文件夹

在 apache 中运行时从虚拟环境导入 Python

apache - 重定向 https ://www to https://non-www - without seeing certificate error, 可能吗?

php - .htaccess RewriteRule 还重写了我的 css、js 和图像文件。如何忽略这些?

php - Nginx 创建文件夹时出现 "Permission denied"

html - 使用 apache 注入(inject) html

mysql - Mac 上的本地主机无法工作/服务器无法连接/404 未找到/403 禁止

php - .htaccess 301 重定向添加一个额外的斜杠

html - 是否可以在作为接入点运行的 ESP8266 Web 服务器上绘制图表?

asp.net - 请求静态内容时避免使用 cookie