密通学院

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6089|回复: 0

[小技巧] apache通过.htaccess(rewrite)判断手机电脑跳转-手机用户重定向到手机版

  [复制链接]
  • TA的每日心情
    萌哒
    2017-2-20 02:57
  • 43

    主题

    55

    帖子

    1180

    铜板

    版主

    Rank: 7Rank: 7Rank: 7

    积分
    1322
    发表于 2017-8-16 01:29:48 | 显示全部楼层 |阅读模式

    马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

    自动判断、重定向的办法也有几种:

    使用网站构建的程序(例如PHP)来判断、重定向;
    使用服务器上的Web服务(例如Apache)来判断、重定向。

    在Apache中设置重定向有两个办法:

    在网站的httpd.conf中设置重定向,适合有服务器完整权限的网站管理员;
    在网站所在目录中修改.htaccess来设置,适合采用虚拟主机形式的网站管理员。

    这两种办法设置的重定向规则其实基本上都是一样的,只是设置的地方不同,

    重定向设置的代码例子:
    RewriteCond %{HTTP_HOST} ^www\.zhi23\.com(.*)$
    RewriteCond %{HTTP_REFERER} !^http\:\/\/(m|www)\.zhi23\.com(.*)$
    RewriteCond %{HTTP_USER_AGENT} !ipad [NC]
    RewriteCond %{HTTP_ACCEPT} “text/vnd.wap.wml|application/vnd.wap.xhtml+xml” [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} “acs|alav|alca|amoi|audi|aste|avan|benq|bird|blac|blaz|brew|cell|cldc|cmd-” [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} “dang|doco|erics|hipt|inno|ipaq|java|jigs|kddi|keji|leno|lg-c|lg-d|lg-g|lge-” [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} “maui|maxo|midp|mits|mmef|mobi|mot-|moto|mwbp|nec-|newt|noki|opwv” [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} “palm|pana|pant|pdxg|phil|play|pluc|port|prox|qtek|qwap|sage|sams|sany” [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} “sch-|sec-|send|seri|sgh-|shar|sie-|siem|smal|smar|sony|sph-|symb|t-mo” [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} “teli|tim-|tosh|tsm-|upg1|upsi|vk-v|voda|w3cs|wap-|wapa|wapi” [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} “wapp|wapr|webc|winw|winw|xda|xda-” [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} “up.browser|up.link|windowssce|iemobile|mini|mmp” [NC,OR]
    RewriteCond %{HTTP_USER_AGENT} “symbian|midp|wap|phone|pocket|mobile|pda|psp” [NC]
    RewriteCond %{HTTP_USER_AGENT} !macintosh [NC]
    RewriteRule ^(.*)$ http://m.zhi23.com/$1 [L,R=302]
    注释:
    第一句通过是HTTP_HOST判断网站的域名,看是否就是要判断的网站;
    第二句是通过HTTP_REFERER判断来源路径,如果是自身传统网站或手机网站就不跳转;
    第三句开始是通过HTTP_USER_AGENT来判断浏览者所用设备是否为手持设备,其中有一句是通过HTTP_ACCEPT判断代码类型,并在开头和结尾排除掉ipad和macintosh;
    最后一句是302重定向到相应的手机版页面。
    实际使用中可能会根据具体情况对上面的代码进行一些修改,最好能理解和掌握Apache的Rewrite规则才好灵活运用。
    以上的例子可以这样验证:用手机浏览“问版主电脑版”(http://www.zhi23.com),看是否自动跳转到“问版主手机版”(http://m.zhi23.com)。

    下面进一步介绍了如何使用apache的mod_rewrite模块修改.htaccess文件判断访问终端类型并重定向的方法。首先要确实服务器是使用apache服务来提供Web服务的,并加载了mod_rewrite模块,具体加载mod_rewrite模块方法,网上有详细教程,请自行sou123.win搜索。

    让apache服务器支持.htaccess

    只要简单修改一下apache的httpd.conf配置就可以让APACHE支 持.htaccess了:AllowOverride None    修改为: AllowOverride All

    ***在普通网站根目录下新建 .htaccess 文件:
    # 将 RewriteEngine 模式打开RewriteEngine OnRewriteBase /
    # Rewrite 规则 判断用户浏览器类型,如果是手机就跳转到手机网站
    RewriteCond %{HTTP_HOST} ^www\.zhi23\.com(.*)$

    RewriteCond %{HTTP_USER_AGENT} "(baidu.Transcoder|mini|Android|blackberry|googlebot-mobile|iemobile|Mobile|ipad|iphone|ipod|opera mobile|palmos|webos|ucweb|Windows Phone|Symbian|hpwOS)" [NC]
    RewriteRule ^(.*)$ http://m.zhi23.com/$1 [L,R=302]

    上面的代码,自动判断手机用户然后跳转到手机网站,并带有相同的参数,如手机用户输入的网址是http://www.baidu.com/index.php?Go=1那么系统跳转时会自动加上参数http://m.baidu.com/index.php?go=1。
    这里需要说明下,因为RewriteRule ^(.*)$ http://m.baidu.com/$1 [L,R=302]的加入,如果手机页面中有需要访问非手机网站资源时,如其他子目录或二级网内容,就需要设置相应正则排除指定网站或文件,如: RewriteRule ^(.*?(?<!jpg)$) http://m.baidu.com/$1 [L,R=302],就不会造成手机访问非手机页面中jpg图片时出现无法访问的问题了。也可以通过判断来源是什么域名来跳转,如:
    RewriteCond %{HTTP_HOST} !^img.baidu.com [NC]
    RewriteCond %{HTTP_HOST} !^ditu.baidu.com [NC]
    RewriteCond %{HTTP_USER_AGENT} "(baidu.Transcoder|mini|android|blackberry|googlebot-mobile|iemobile|Mobile|ipad|iphone|ipod|opera mobile|palmos|webos|ucweb|Windows Phone|Symbian|hpwOS)" [NC]RewriteRule ^(.*)$ http://m.baidu.com/$1 [L,R=302]
    上面的意思就是,如果不是访问img.baidu.com,ditu.baidu.com的手机用户才跳转到m.badu.com。

    apache通过.htaccess(rewrite)判断手机电脑跳转
    ***电脑访问手机网站时跳转:
    手机网站根目录下新建 .htaccess 文件:
    # 将 RewriteEngine 模式打开
    RewriteEngine OnRewriteBase /
    # Rewrite 规则 判断用户浏览器类型,如果是电脑用户就跳转到普通网站
    RewriteCond %{HTTP_USER_AGENT} "!(baidu.Transcoder|mini|android|blackberry|googlebot-mobile|iemobile|Mobile|ipad|iphone|ipod|opera mobile|palmos|webos|ucweb|Windows Phone|Symbian|hpwOS)" [NC]
    RewriteRule ^(.*)$ http://www.baidu.com/$1 [L,R=302]
    这样,在手机网站下,如果是电脑用户访问了,就自动跳转到普通网站,让用户更适合浏览。


    Tips:
    [NC]的意思 即不分大小写
    [R]的意思 重定向
    [F]的意思 禁止访问
    [L]的意思 这是最后一条规则,exit


    补充:在判断跳转的条件中加入百度转码的user-agent: baidu.Transcoder,就可以让百度抓取时知道手机版的网址,并且不再自行进行转码。百度关于禁止转码的说明请看我的另外一篇博文《禁止百度WEB页面到手机WAP的转码》,用上面的办法就是百度说明中的办法


    密城通,致力于为国内广大中小站长提供本地化生活服务平台运营方案。
    回复

    使用道具 举报

    快速回复: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    首页|Archiver|手机版|小黑屋|密通学院:专业网络营销服务商

    GMT+8, 2024-4-27 07:29 , Processed in 0.111328 second(s), 26 queries QQ

    Powered by XMT Inc. © 2015-2025 ArrayV1.0 豫ICP备17022382号

    系统运营:密城通 豫公网安备 41018302000212 号

    快速回复 返回顶部 返回列表