关于IIS6下PHP使用header设置404但实际返回200的坑

起因是发现wordpress所有该404的地方全部返回的是200,记得以前处理过一次,但服务器重新配置后又这样了,也忘了当时怎么修好的。

然后发现,自己写一个php文件用header(‘HTTP/1.1 404 Not Found’)也是无效的,经过几小时测试,偶然发现header(‘Status: 404 Not Found’)是有效的。

进一步偶然发现php.ini中的cgi.rfc2616_headers被改为了1,而默认值是0。这个值是1的话php会发送HTTP/1.1这样的文字来设置状态。显然,iis6+fastcgi并不能很好的支持。

然而为什么会手贱改为1呢,再一搜索发现是网上的iis+fastcgi+php+mysql教程全部说要改为1,这些教程都是从一个地方复制粘贴的,很多年前是照着这个教程配置的服务器。

也就是说,网上的教程是错的!网上的教程是错的!网上的教程是错的!

这个坑非常难排查!直接搜iis php header 404 200等关键字是搜不出来的!以上发现改成Status就有效和观察到ini被改过都是偶然发现的!

特此记录。

Leave a Reply

Your email address will not be published. Required fields are marked *