关闭 static 路由可提升 api 性能,因 thinkphp 默认的 static 规则会无意义地匹配 public/ 文件,造成磁盘 i/o 与正则开销;正确方式是在 config/route.php 中顶层配置 '__static__' => false,并清路由缓存。

为什么 static 路由会拖慢你的 API 接口
ThinkPHP 默认开启的静态资源路由(__STATIC__ 规则)会在每次请求时尝试匹配 public/ 下的文件路径,哪怕你压根没放任何静态资源。对纯 API 项目来说,这属于无意义的磁盘 I/O 和正则匹配开销——尤其是当 Nginx/Apache 已经直接托管 public/ 目录时,TP 层的这层判断纯属冗余。
常见错误现象:curl -I /api/v1/user 返回 200 但耗时突然升到 80ms+;日志里反复出现 Route not found: /api/v1/user 后又“意外”命中,说明路由匹配被干扰。
- 确认是否真需要 TP 处理静态资源:绝大多数生产环境都由 Web 服务器直供
public/static/或 CDN 托管,TP 层应只管动态逻辑 - 检查
config/route.php是否存在__STATIC__相关规则(尤其在升级后残留的旧配置) - 禁用后接口平均响应可降 15–40ms(实测 PHP 8.1 + ThinkPHP 6.1)
关闭 __STATIC__ 路由的三种方式(按推荐顺序)
别改框架源码,也别注释核心路由文件——这些方式要么升级即失效,要么破坏可维护性。真正稳妥的是从配置和入口层拦截。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 在
config/route.php中显式关闭:添加'__STATIC__' => false到路由配置数组顶层(不是在return []里嵌套) - 若使用命令行部署或容器化,启动前执行
php think route:clear清除缓存,否则旧路由规则仍生效 - 更彻底的方式:在
public/index.php入口最顶部加一行define('APP_USE_STATIC', false);,然后在config/route.php中用该常量控制加载逻辑
route.php 配置项写错导致关闭失效的典型坑
很多人以为只要删掉 __STATIC__ 规则就行,但 ThinkPHP 的路由加载机制会自动补全默认规则——除非你明确切断它的触发条件。
- 错误写法:
'__STATIC__' => []或'__STATIC__' => null—— 框架仍会按空数组逻辑兜底启用 - 正确写法必须是布尔值
false,且需确保它位于路由配置的**第一级键**,例如:return ['__STATIC__' => false, 'domain' => [], 'rule' => []]; - 如果用了多应用模式,要检查对应应用目录下的
config/route.php,而非根配置 - 修改后务必验证:访问一个真实不存在的静态路径如
/static/xxx.js,应返回 404(由 Web 服务器返回),而不是 TP 的 404 页面
关闭后还要注意的两个兼容点
关掉静态路由不等于可以随意删文件。有些隐式依赖仍在运行时生效。
-
think\facade\Url::build()生成的静态资源链接(如url('@static/css/app.css'))仍能工作,因为这是路径拼接,不走路由匹配 - 如果你在控制器里手动调用
request()->file()上传到public/uploads/,这部分不受影响;但若依赖__STATIC__规则做权限拦截(比如禁止访问public/config/),关掉后需改用 Web 服务器配置或中间件重写
最常被忽略的是调试阶段:本地开发用内置 PHP Server 时,静态资源确实需要 TP 路由支持,所以建议用环境变量区分,比如 APP_ENV=prod 时才关闭 __STATIC__。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










