例行检查服务器,在一台服务器上发现一个诡异的问题,任何一个本应返回404的链接,服务器都返回了200。不管是真404(访问网站不存在的文件),还是用动态脚本(比如php的 header('HTTP/1.1 404 Not Found'); )代码创建的返回404的程序,返回的都是200,这是一个非常严重的问题。
在蜘蛛的世界里,和我们看到的网页不是一样的。网页返回404还是200,在普通的网友看来并没有什么特殊,我们只会关注网页能不能打开。而蜘蛛就不一样了。网页返回404,就是告诉蜘蛛这个网页是不存在的,而不管是否最终能在浏览器呈现出来。同理如果网页返回200,是告诉蜘蛛一切正常,也不管这个网页最终能否在浏览器显示。
这个问题非常严重,我们有个网站经过几次改版,以前百度收录的一些链接已经打不开了,也就是“死链”,而正常情况下,死链会返回给蜘蛛404的,蜘蛛明白了,这个网页不存在了,就会从库里删除,而不会影响对网站的权值。现在因为这个诡异的问题,所有的404页面,服务器都返回给蜘蛛200了,蜘蛛认为这个网页是正常的,但是的的确确这个网页不存在了,打不开了,这会引起降权直至K站。
惊出了一身冷汗,还好发现得早,关键这是什么原因造成的呢?所有的可能都尝试过,没有解决,花了几个小时啊,最后,突然想起来了,服务器上安装的网站安全狗,我们开启了“HTTP响应内容保护功能”,于是立即关闭这个功能,重启服务器,一切正常,久违的404回来了。
这个世界上,没有无因之果,我想起了一些客户找我,总是说 “我什么什么都没做,**功能就坏掉了” 。我笑着告诉他“这是不可能的”。最终在我们的引导下,都找到了问题的因,都是有意或无意改动了一些东西造成的。
写此文章,给需要的朋友提供一个解决此类问题的思路。