考虑到网站的在多种设备下的兼容性,有很多网站会有手机版和电脑版两个版本。访问同一个网站URL,当服务端识别出用户使用电脑访问,就打开电脑版的页面,用户如果使用手机访问,则会得到手机版的页面。

1、判断客户端的设备类型

要想让网站适配PC和手机设备,首先要能做出准确的判断。HTTP请求的Header中的User-Agent可以区分客户端的浏览器类型,可以通过User-Agent来判断客户端的设备。

无论是PC还是手机,由于操作系统、浏览器的多样性,自己来实现这个判断并不容易。好在国外有一套开源的通过User-Agent区分PC和手机的解决方案,可以直接使用:
http://detectmobilebrowsers.com/

由于本文使用Nginx,只要在网站上下载Nginx配置即可

set $mobile_rewrite do_not_perform;if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino") {set $mobile_rewrite perform;
}if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {set $mobile_rewrite perform;
}if ($mobile_rewrite = perform) {# 手机
}

Nginx通过以上的配置,获取HTTP请求的User-Agent,使用正则表达式来匹配手机设备。

2、根据设备适配不同的页面

首先要准备好网站的PC版和手机版两套页面,通过之前对设备的判断,来反向代理到不同的版本:

location / {proxy_pass http://192.168.20.1;  # 电脑版if ($mobile_rewrite = perform) {proxy_pass http://192.168.20.2;  # 手机版}
}

如果是静态页面不需要反向代理,那么用root替换proxy_pass:

location / {root /html/pc;if ($mobile_rewrite = perform) {root /html/mobile;}
}

3、手机版链接到PC版

在用户打开页面后,如果进入了手机版,可能由于错误判断设备,或者用户想获取更多信息,可能会需要打开PC版。在手机版页面的底部,通常会有一个链接指向PC版:
电脑版链接
可以通过在点击“电脑版”链接的时候用JavaScript设置一个Cookie来实现这个功能:

<a href="http://xxx.com/" onclick="document.cookie = 'gotopc=true'">电脑版</a>

同时在Nginx配置中加入判断,如果包含此Cookie则进入PC版:

if ($http_cookie ~ 'gotopc=true') {set $mobile_rewrite do_not_perform;
}

4、调试

完成以上配置后,可以通过Chrome浏览器来模拟手机、平板电脑等设备。
Chrome模拟手机

最后给出完整的Nginx配置:

server {  listen 80;set $mobile_rewrite do_not_perform;if ($http_user_agent ~* "(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino") {set $mobile_rewrite perform;}if ($http_user_agent ~* "^(1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-)") {set $mobile_rewrite perform;}if ($http_cookie ~ 'gotopc=true') {set $mobile_rewrite do_not_perform;}location / {proxy_pass http://192.168.20.1;  # 电脑版if ($mobile_rewrite = perform) {proxy_pass http://192.168.20.2;  # 手机版}}
}

(二) Nginx手机版和PC电脑版网站配置相关推荐

  1. Nginx学习总结(2)——Nginx手机版和PC电脑版网站配置

    考虑到网站的在多种设备下的兼容性,有很多网站会有手机版和电脑版两个版本.访问同一个网站URL,当服务端识别出用户使用电脑访问,就打开电脑版的页面,用户如果使用手机访问,则会得到手机版的页面. 1.判断 ...

  2. 诺亚传说手游怎么用电脑玩 诺亚传说手游PC电脑版教程

    <诺亚传说手游>是一款经典的科幻之作,游戏是从端游戏中移植,是一款以即时战斗为背景的科幻类游戏,有着精致的3D场景打造带给玩家丰富的玩法体验,优秀的剧情让你感受游戏精彩魅力.下面小编就给亲 ...

  3. 天涯明月刀手游模拟器哪个好?天涯明月刀手游PC电脑版教程

    <天涯明月刀手游>继承端游的高品质美术效果,端游的全套真实灵动的捏脸系统,天气系统,超远视距,LOOKAT 技术,大世界场景等等,都在手游上一一重现和还原.下面小编就给亲们介绍下天涯明月刀 ...

  4. 塞尔达传说王国之泪 pc 电脑版下载安装详细教程

    下载资源 资源下载在文章最下方 简介 最近塞尔达传说比较火,而且大家都在说在电脑上玩比switch上体验好特别多,于是我来试了试,果然很舒适,不过为了游戏持续良好的发展,还是建议大家先购买正版后,再来 ...

  5. 剪映pc电脑版下载 | 剪映(视频剪辑软件)官方正式版V1.1.1.0 | 剪映专业版剪映电脑版安装非常简单

    剪映pc电脑版是来自国内首屈一指的互联网巨头字节跳动最新开发的一款全能好用且有AI人工智能技术加持的专业电脑视频剪辑软件,目前是威航软件园拿到的剪映专业内测版本,最新的剪映专业版界面更清晰,面板更强大 ...

  6. 梦幻西游3D手游怎么用电脑玩 梦幻西游3D手游PC电脑版教程

    <梦幻西游3D>手游构建了一个玩家"前所未见"的3D大世界,采用网易自主研发的Messiah引擎,打造PBR系统渲染电影级画面,一草一木,极尽真实.全动态天气系统,将阴 ...

  7. 电脑玩手游绝地求生:全军出击手游PC电脑版使用教程

    由天美工作室群与PUBG合作推出的<绝地求生:全军出击>手游已经在昨天正式服全服上线了.很多小伙伴就想知道刺激战场游有没有PC电脑版本?怎么在电脑上用鼠标键盘来操控电脑玩手游?但是最新来自 ...

  8. 合金弹头觉醒PC电脑版用逍遥模拟器玩数据互通零氪教程

    合金弹头觉醒PC电脑版用逍遥模拟器玩数据互通零氪教程 腾讯的合金弹头觉醒上线了,PC上玩家是可以直接用逍遥模拟器玩的,使用微信和QQ就可以直接登录,账号数据手机电脑都是互通的.电脑上使用键盘鼠标像玩端 ...

  9. 怎么在电脑上玩手游绝地求生:刺激战场?刺激战场PC电脑版攻略

    腾讯的吃鸡新游绝地求生:刺激战场已经在IOS端和安卓端全服正式上线.刺激战场什么时候出PC电脑版?怎么在电脑上玩刺激战场?什么方法玩刺激战场最流畅?对于很多不喜欢在电脑上玩手游的玩家存在这样的疑问.毕 ...

最新文章

  1. oracle spatial(一)开端
  2. Go 语言读写 Excel
  3. java sdk 1.7_jdk 1.7升级到1.8后显示还是1.7
  4. OpenCV清除背景扣除background subtraction的实例(附完整代码)
  5. java doc转pdf_java 完美解决 ppt/pptx 转pdf 源码
  6. android 手动签名apk,记录手动签名APK的过程
  7. php form validator 下单,PHP Form表单验证:PHP form validator使_php
  8. Win32程序设计(Windows程序设计机理)
  9. CentOS上安装软件错误提示:configure: error: no acceptable C compiler found in $PATH
  10. 20180712 (函数,函数的返回值return,函数的参数以及实际运用)
  11. 电子科技大学格拉斯哥学院英文教材使用效果
  12. 伊格纳修斯的难题 Ignatius‘s puzzle
  13. HDU6608 Fansblog
  14. 艾伦图灵_艾伦唤醒控制
  15. ANSYS Workbench远端位移边界条件的解析
  16. Tekton系列之实践篇-使用Tekton Trigger让Tekton使用更简单
  17. FDTD Solutions-边界条件
  18. 那些年啊 那些事 一个程序员的奋斗史 121
  19. python 报错 invalid value 2_【python】错误解决经历
  20. JAVA学习——图形化窗口图标设置

热门文章

  1. 过河问题(经典贪心)
  2. centos7桌面版安装向日葵 or ToDesk
  3. 如何查看电脑运行记录
  4. 手机屏幕坏了如何把手机里面的资料取出来_手机应急处理—进水篇
  5. 杠铃策略,给你的“B计划”一个“阶层跃升”的机会
  6. 电脑图片无损放大怎么操作?怎么无损放大图片?
  7. java 中加载图片
  8. 商家代运营=商家+代运营?
  9. 帝国竞争算法(Imperialist Competitive Algorithm, ICA)
  10. 东半球最强饭局,大佬们都吃了啥?App Store 已为中国开发者获利 170 亿美元