需配置asset_host并重定义__static__常量:一、在config/app.php中添加'asset_host' => 'https://cdn.example.com',清空runtime/cache;二、在app/common.php中动态定义__static__指向cdn域名。

如果您在ThinkPHP项目中已接入CDN服务,但静态资源仍从源站加载,则可能是CDN域名未正确注入资源路径或回源配置不匹配。以下是设置CDN加速域名的具体操作步骤:
一、配置应用级CDN基础地址
通过框架配置项统一控制静态资源的基础URL,确保所有asset()调用自动拼接CDN域名,避免模板硬编码。该方式支持环境隔离与动态切换。
1、打开config/app.php文件,在配置数组中添加'asset_host'项:
2、设置值为完整CDN域名,必须包含协议(https://)且末尾不带斜杠,例如:'asset_host' => 'https://cdn.example.com'。
3、保存后清空runtime/cache/目录下所有缓存文件,防止旧编译模板残留。
二、动态定义__STATIC__常量指向CDN
ThinkPHP模板中广泛使用的__STATIC__常量默认指向本地/static/路径,需重定义使其适配CDN环境,保证历史模板无需修改即可生效。
1、编辑app/common.php文件,在文件顶部<?php 之后插入定义语句:
2、使用config('app.asset_host')读取上一步配置,若为空则回退至__ROOT__ . '/static',确保本地开发正常:
3、代码示例:defined('__STATIC__') or define('__STATIC__', config('app.asset_host') ?: __ROOT__ . '/static');。
三、强制模板使用asset()函数生成路径
直接在HTML中写死/static/css/app.css会导致CDN切换失败,必须通过asset()函数经由框架路由逻辑生成URL,才能受asset_host控制。
1、将模板中所有静态资源引用替换为{:asset('css/app.css')}、{:asset('images/logo.png')}等格式。
2、禁止使用__STATIC__/css/app.css或字符串拼接形式,否则无法响应CDN配置变更。
3、检查控制器中PHP代码调用静态资源的位置,统一改用\think\facade\Url::asset('js/main.js')。
四、配置CDN回源路径为/public
CDN节点请求静态资源时需准确回源至ThinkPHP的public目录,否则返回404;回源路径错误是上线后静态资源全部失效的最常见原因。
1、登录CDN服务商控制台,进入目标加速域名的「回源配置」页面。
2、将「回源路径」显式设置为/public(注意:阿里云需带末尾斜杠,腾讯云建议不带,以curl -I https://your-cdn.com/static/css/app.css返回HTTP 200为准)。
3、确认服务器Web服务根目录已指向项目public/子目录,而非项目根目录。
五、设置CDN缓存规则排除PHP动态内容
若CDN误缓存PHP执行结果(如/index.php输出),用户将看到过期HTML或503错误;必须严格区分动静态资源缓存策略。
1、在CDN缓存规则中新增一条优先级最高的规则:匹配路径*.php,设置缓存行为为不缓存或缓存时间0秒。
2、另建规则匹配静态后缀:*.css、*.js、*.png、*.woff2等,设置Cache-Control: public, max-age=31536000。
3、访问任意CSS文件,用浏览器开发者工具检查响应头,确认存在Cache-Control: public, max-age=31536000且无no-cache覆盖。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











