必须配置asset_url环境变量为cdn域名(如https://cdn.example.com,末尾不加斜杠),并确保app_url为主站地址,执行php artisan config:clear后验证blade中asset()生成的url是否指向cdn,且需将public目录内容同步至cdn根路径。

要让Laravel站点的CSS、JS、图片等静态资源从CDN加载而非主站,必须绕过asset()函数默认拼接APP_URL的行为,否则所有资源仍走源站,CDN形同虚设。
配置ASSET_URL启用CDN
打开项目根目录下的.env文件,添加或修改这一行:
ASSET_URL=https://cdn.example.com
【末尾不能加斜杠】——如果写成https://cdn.example.com/,asset('css/app.css')会生成https://cdn.example.com//css/app.css,双斜杠触发404。
确保APP_URL保持为你的主站地址,例如APP_URL=https://yoursite.com,它只影响非资源类URL,与asset()无关。
执行命令清除配置缓存,使新配置立即生效:
php artisan config:clear
验证CDN是否生效
在Blade模板中插入一行测试代码:
访问页面,右键查看网页源码,定位该标签。若href属性值以https://cdn.example.com/css/app.css开头,说明CDN已接管;若仍是https://yoursite.com/css/app.css,则检查.env是否保存成功、config:clear是否执行、服务器是否重启了OPcache(必要时执行php artisan config:cache)。
注意:此验证必须在生产环境(APP_ENV=production)下进行,开发环境可能因调试机制绕过ASSET_URL。
同步资源到CDN根目录
第一步:确认public目录下资源结构完整,如public/css/app.css、public/js/app.js、public/images/logo.png。
第二步:将整个public目录内容(不含public本身)上传至CDN服务商的存储根路径,例如OSS Bucket根目录或CDN源站根目录。
第三步:重点核对路径一致性——CDN上必须存在/css/app.css,而不是/assets/css/app.css或/public/css/app.css。
【CDN域名严禁带子路径】——ASSET_URL只能是纯域名,任何路径部分都由asset()传入的参数承担。











