Lighttpd能否将HTTP错误响应重定向到error.php自定义处理程序?
不生效的原因
这个功能是可以实现的,你当前配置不生效有两个核心原因:
- 配置的
server.error-handler参数仅处理lighttpd自身触发的错误(比如请求的静态文件不存在、访问权限不足等请求未到达PHP前产生的错误)。你在PHP脚本中主动调用http_response_code(404)返回状态码时,请求已经完成PHP处理流程,lighttpd默认不会再拦截处理后端返回的响应状态码。 server.error-handler的参数值配置错误,该参数需要传入URL路径而非服务器本地文件路径,正确值应为/error.php,lighttpd会自动在站点根目录下查找对应文件。
正确配置方法
lighttpd 1.4.40及以上版本支持通过server.error-intercept参数拦截后端(包括PHP)返回的错误状态码,按如下调整lighttpd.conf即可:
# 配置404错误的处理器URL路径 server.error-handler-404 = "/error.php" # 开启拦截后端返回的404状态码,交由错误处理器处理 server.error-intercept = ( "404" => 1 ) # 如需拦截其他错误状态码,可按如下格式添加 # server.error-intercept = ( # "403" => 1, # "404" => 1, # "500" => 1 # )
修改配置后重启lighttpd服务即可生效,后续无论是lighttpd自身触发的404,还是PHP脚本返回的404状态码,都会统一交由/error.php处理。
如果你使用的lighttpd版本低于1.4.40,也可以直接在PHP应用层面统一处理:在公共入口文件中判断响应状态码,当检测到404时直接引入error.php文件后终止程序即可。
内容的提问来源于stack exchange,提问作者ashishv
相关产品推荐
相关产品推荐

