我想使用Mod-rewrite将不同版本的页面提供给不同的设备。例如,我会向具有1920 x 1024显示器的设备发送不同版本,而不是iPhone。似乎我想让Mod-rewrite根据HTTP_USER_AGENT的内容做出决定,我想知道谁在跟踪iPad Air 2在该变量中的含义,iPhone 6的用途等等,在某个地方必须有一张最新的大桌子。
感谢您的帮助
答案 0 :(得分:1)
这不是设备,而是在其上使用的浏览软件将其HTTP_USER_AGENT
报告给Web服务器。除了浏览器的名称和版本信息之外,它通常还包括平台或设备名称以及当前运行的操作系统版本。
例如,最新的Firefox 36报告以下用户代理
Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0
包括其版本36.0
,它在Windows
上运行的平台和操作系统版本6.3
,即Windows 8.1。浏览器通常还会报告系统是否为64位WOW64
和用户的语言环境,尽管通常缺少默认的en-US
。
这是Safari在Windows 7和iPad上报告的内容:
Mozilla/5.0 (Windows; U; Windows NT 6.1; fr-FR) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27
Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25
而且,这就是它。您将不会收到设备生成(iPad 2?)或其显示指标(屏幕运行的分辨率)等详细信息。
因此,虽然您可以确定设备的类别(桌面或移动设备)并提供备用内容,但您无法提供特定于分辨率的内容。那么,其他网站是如何做到的呢?嗯,答案是......
HTML5允许您编写动态布局,自动调整到可用的屏幕空间。因此,在桌面上,它会以3x2布局呈现您的网站,它可以在移动浏览器上自动切换到1x6。最好的部分是它独立于用户代理;所以你会看到它在桌面浏览器上自动调整布局(当你调整大小时),以及在移动浏览器上使用桌面模式在其上故意报告不同的< em> user-agent 以接收您网站的桌面版本。
但是,用户代理仍然很方便。没有标准化的存储库,但有很多网站跟踪用户代理字符串,如user-agents.org,httpuseragent.org,useragentstring.com等。最后一个保持最新。
你显然无法匹配所有这些,所以会像
那样进行子字符串匹配RewriteCond %{HTTP_USER_AGENT} (ipad|iphone|ipod|mobile|android|blackberry|palmos|webos) [NC]
请查看Mobile Redirect using htaccess,了解其他用户代理其他已成功使用的.htaccess。
我记得几年前,当我以前访问谷歌搜索时,它会浏览我的浏览器并重定向到自己,显示分辨率附加到查询字符串。我相信他们是为分析而不是布局而做的。现在他们编码所有东西(甚至是他们的饼干),所以你无法确切地说出他们正在做什么。
如果您对类似内容感兴趣,JavaScript可以帮助您:window.screen.width
和window.screen.height
将为您提供客户解决方案。如果您只对浏览器必须呈现网站的实际屏幕空间感兴趣,请改用availWidth
和availHeight
。
因此,您的<script>
可以重定向到特定于解决方案的网页
<script type="text/javascript">
if ((screen.width >= 1280) && (screen.height >= 720)) {
window.location.replace('http://example.com/index-hi.html');
} else if ((screen.width >= 1024) && (screen.height >= 600)) {
window.location.replace('http://example.com/index-med.html');
} else {
window.location.replace('http://example.com/index-low.html');
}
</script>
或者,您可以使用 .htaccess 设置 Cookie 并使用特定于分辨率的目录提供页面。