PHP调用Header返回404时,IIS 8.5不显示默认错误页的解决咨询
解决IIS 8.5 + PHP 5.6返回404状态但显示空白页的问题
当你通过PHP代码header($_SERVER['SERVER_PROTOCOL'] . ' 404 Not Found');发送404状态码时,IIS默认只会传递这个状态码,但不会主动替换页面内容为它的默认404错误页——因为它认为PHP已经处理了响应内容(哪怕是空的)。要让IIS显示默认的404错误页,你可以按照以下两种方法操作:
方法1:通过IIS管理器可视化配置
- 打开IIS管理器,定位到你的目标网站。
- 在功能视图中,双击错误页图标。
- 在错误页列表中找到404 - 未找到这一项,右键点击它选择编辑。
- 在弹出的“编辑自定义错误页”对话框中,选择**“执行URL”**选项,然后输入IIS默认404页的路径(通常是
/iisstart.htm,或者你自定义的错误页路径比如/404.html)。- 注意:路径要使用相对于网站根目录的格式,不要用本地文件路径。
- 点击确定保存设置即可。
方法2:通过web.config手动配置
如果你更习惯直接修改配置文件,可以在网站根目录的web.config中添加以下内容:
<system.webServer> <httpErrors errorMode="Custom"> <remove statusCode="404" subStatusCode="-1" /> <error statusCode="404" path="/404.html" responseMode="ExecuteURL" /> </httpErrors> </system.webServer>
- 把
/404.html替换成你实际想使用的错误页路径,如果想用IIS自带的默认错误页,直接用/iisstart.htm即可。
额外注意事项
- 确保你的错误页文件确实存在于指定路径,并且IIS有读取该文件的权限。
- 如果PHP脚本在发送404头之后还有输出内容(包括空格、换行符),IIS会优先使用PHP的输出,而不是替换成错误页——所以要完全用IIS的错误页,记得发送头后不要输出任何内容。
- 这个问题是IIS层面的响应处理逻辑,和PHP的
display_errors、log_errors等配置无关,不用修改php.ini。
内容的提问来源于stack exchange,提问作者ajar




