TP6静态资源路径失效主因是误用TP5.1配置方式,须将tpl_replace_string置于config/view.php中并清空runtime/view缓存,同时确保public/为Web根目录且文件放置正确。

直接改 config/view.php 里的 tpl_replace_string,别碰 VIEW_PATH 或硬写 __ROOT__——TP6 的静态资源路径失效,90% 是因为还在沿用 TP5.1 的配置位置和写法。
为什么 config.php 里的 view_replace_str 不起作用
TP6 已废弃全局 config.php 中的 view_replace_str 配置项。TP5.1 放在 config.php 顶层的写法,在 TP6 中完全被忽略。
- TP6 的模板替换配置必须放在
config/view.php文件中,且字段名为tpl_replace_string(不是view_replace_str) - 如果你之前在 TP5.1 的
application/config.php里写了:'view_replace_str' => ['__CSS__' => '/static/css'],迁移到 TP6 后这段代码不会加载,也不会报错,只是静默失效 - TP6 的
env()函数只在配置加载阶段执行一次,所以tpl_replace_string中可安全使用env('STATIC_DOMAIN', '/static')
如何正确配置 __STATIC__ 替换符并支持 CDN
在 config/view.php 中明确设置 tpl_replace_string,让模板里写的 {__STATIC__/css/app.css} 能动态拼出正确 URL。
- 确保
config/view.php返回的数组包含:'tpl_replace_string' => ['__STATIC__' => env('STATIC_DOMAIN', '/static')] -
.env文件中按环境区分:STATIC_DOMAIN=/static(开发)或STATIC_DOMAIN=https://cdn.example.com/static(生产) - 模板中统一使用
{__STATIC__/xxx},不要混用{__ROOT__}/static——后者会把入口脚本路径(如/index.php)也拼进去,CDN 场景下必然错乱 - 修改配置后,必须清空
runtime/view/目录,否则缓存模板仍用旧路径
public/ 目录结构和文件位置不能错
TP6 要求所有可被 Web 直接访问的静态文件,物理上必须放在 public/ 下,且 Web 服务器 root 必须指向 public/。这不是可选项,是强制规则。
立即学习“PHP免费学习笔记(深入)”;
- 原 TP5.1 的
public/static/或static/目录,应整体复制到新项目的public/static/(保持层级) - 不要把 CSS/JS 文件直接丢进
public/根目录,否则后续加版本号、切 CDN 域名时无法批量控制路径前缀 - 如果 Nginx/Apache 没有正确设置 root 为
public/,哪怕配置全对,浏览器请求也会 404 -
public/index.php是唯一入口,绝不能删,也不能挪动位置
最常被忽略的一点:TP6 的 __STATIC__ 只负责 URL 拼接,不负责文件存在性校验。路径写错、文件没放对位置、缓存没清、Web 服务器 root 指向错误——这四者只要有一个出问题,{__STATIC__} 就会“看起来生效”,但浏览器实际加载失败。排查顺序建议从 Web 服务器配置开始,而不是先改 PHP 配置。



















