微博手机客户端转码后打开页面错乱的问题

碰到这样一种情况:在使用新浪微博共享一个页面连接之后,新浪会用一个短连接替换掉原来的长连接,然后发布这条微博。用户在浏览这条微博时,使用网页版本是没有任何问题的,但对于通过手机客户端访问之后,系统会自说自话的通过所谓的“精简模式”省略掉了页面中所有的CSS/JS效果,美其名曰“手机版”,以区别于“传统版”。很多页面将会出现错乱甚至于“白板”。例如下图:

类似的问题也出现在“UC”以及其他手机浏览器上。

这个问题出现的原因只能归罪于短域名服务器或者转码机器人抓取的不够智能,那我们不妨在服务器短做文章,强制机器人不对页面进行转码即可。

方法1:域名标示

最懒的方法,这个方法主要是利用了机器人的共同特点,就是对于一些特定的域名的页面不予转码。站长Litrin已知的有wap 3g。即例如本站的www.litrin.net同时指定一个域名3g.litrin.net。分享链接时直接贴出3g域名的链接,这样抓取机器人则不会转码。

这是最方便的方法,但对于客户端来说并不友好。除非您的网站是纯手机访问,否则不建议这种方式实现。

方法2:HTML标签法

这个是在页面上进行标记,指定该页面支持手机直接访问。方法是在将源最头部的HTML标签

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

改为:

<!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd">

这种方法由于采用的方法可能导致某些浏览器出现问题,故也不是建议的方法。

 方法3:HTTP header方法

这种方式是在Http的header中加入对应的标签要求机器人不予转码,对应的标签和标签值为:

Content-Type: text/vnd.wap.wml; charset=UTF-8

如果使用的是php,则对应的是直接对浏览器标示中含有“SINA_ROBOT”字符的访问但对增加一条

header(“Content-Type: text/vnd.wap.wml; charset=UTF-8”); 即可

如果您使用的是nginx,那就更加方便了,只要在配置文件中加一段:

if ($http_user_agent ~ SINA_ROBOT) {
    add_header "Content-Type" "text/vnd.wap.wml; charset=UTF-8";
 }
推荐阅读:
评价一个网站的“大小”,处于视
种种原因,站长已经很久没有关注
Php-fpm由于其特有的优势

发表评论

电子邮件地址不会被公开。 必填项已用*标注

请补全下列算式: *

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据