ThinkPHP6.0关闭默认错误页面需三步:关调试(APP_DEBUG=false、ini_set('display_errors','0'))、换处理器(自定义Handler类继承ExceptionHandle并重写render方法)、控输出(按HTML/API类型返回友好提示或JSON,捕获RouteNotFoundException)。

ThinkPHP6.0 关闭默认错误页面,核心不是“禁用”它,而是让框架不显示调试页、不暴露敏感信息,并接管所有异常走你定义的响应逻辑。关键在于三步:关调试、换处理器、控输出。
关闭 APP_DEBUG 并确保生效
这是最基础也最容易出错的一步。仅在 .env 中设 APP_DEBUG=false 不够,还需确认:
- config/app.php 中
'app_debug' => env('APP_DEBUG', false),不能写死为true - public/index.php 开头加
ini_set('display_errors', '0');,防止 PHP 层级错误绕过框架直接输出路径 - 运行
php think env:show或var_dump(config('app.app_debug'))验证最终值确为false
指定自定义异常处理器
确保 config/app.php 中的异常处理类指向你自己的实现:
'exception_handle' => \app\exception\Handler::class- 该类必须继承
think\ExceptionHandle,且render()方法返回Response实例(不能echo或die) - 开发时可先复制 vendor/topthink/framework/src/exception/Handle.php 到 app/exception/Handler.php,再修改
区分请求类型返回安全响应
默认错误页消失后,你要决定「用户看到什么」。推荐按请求类型分流:
-
页面请求(HTML):配置
'exception_tmpl' => app()->getAppPath() . 'view/error/404.html',模板中只显示友好提示,不读$e->getMessage()等变量 -
API 请求(JSON):在
Handler::render()中判断是否为 API(如检查 URL 是否以/api/开头),然后用response()->json(['code'=>500, 'msg'=>'服务器开小差了'], 500)返回,显式设置Content-Type: application/json - 对
RouteNotFoundException(404)单独捕获并 throwHttpException(404),才能进入 render 流程,否则会空白
隐藏底层 PHP 错误输出
即使框架不显示,默认 PHP 致命错误仍可能白屏或暴露路径。需额外加固:
- php.ini 中确认
display_errors = Off、log_errors = On - 检查 PHP 错误日志路径是否可写,例如
/var/log/php_errors.log - 宝塔等面板中,禁用网站“强制显示错误信息”选项
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











