本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规。大家都是程序员,不要闹得不开心。

最近苏南大叔仔细查看了博客的服务器日志,发现了一个令人震惊的事实。那就是,某些情况下,百度带来的流量,居然访问到了404页面!可以想像的出,访客们看到苏南大叔设置的404页面时的悲伤表情。但是!页面是真实存在的!并没有404

据苏南大叔推测,这个应该是某一版百度搜索的bug!据猜测,应该是固化在第三方代码中的那种百度代码的bug所导致的。而且似乎,比重还是不小的。欲知详情,请阅读下面的内容!

症状描述

下面截图一张,展示一下,这个404页面的形成过程。

苏南大叔:typecho 不能正常接收百度引流的解决方案 - typecho_404
typecho 不能正常接收百度引流的解决方案(图3-1)

在图中我们可以看到,这个由百度带来的流量,错误的添加了参数到苏南大叔的html页面上,但是却没有拼接出加参数所必须的?符号。这个是不能接受的事情,html页面由此就404了。真心是一个由问号引发的大bug啊。

苏南大叔:typecho 不能正常接收百度引流的解决方案 - typecho_404_2
typecho 不能正常接收百度引流的解决方案(图3-2)

解决方案

苏南大叔临时写了个小的poc,放在了index.php里面,如果发现,我的html文件后面直接跟着&符号的时候,就给它替换成?符号。问题临时得到解决。

$uri=trim($_SERVER["REQUEST_URI"]);
if(!strstr($uri,".html&")===FALSE){
    header("Location:".str_replace(".html&",".html?",$uri),301);
    exit();
}

苏南大叔:typecho 不能正常接收百度引流的解决方案 - code
typecho 不能正常接收百度引流的解决方案(图3-3)

深入探讨

仔细看症状,发生这种事情的大多数情况下,百度给html文件,生硬添加的参数都是类似&wd=&eqid=的。所以,寻找这种情况的发生场景就是重点了。根据agent信息描述,这种情况,可能有较大几率发生于firefox43中,但是苏南大叔专门下载了一个firefox43,并没有出现这种状态。聪明的读者,您知道,这种怪异的现象,到底是怎么产生的么?

更多typecho相关经验文字,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。