laravel生产环境静态资源需通过cdn加载,须配置asset_url=https://cdn.example.com(无尾斜杠),保持app_url为主站地址,执行php artisan config:clear,验证href是否为cdn路径,并将public目录内容同步至cdn根目录。

让Laravel生产环境的CSS、JS、图片等静态资源从CDN加载而非主站,必须绕过asset()函数默认拼接APP_URL的行为,否则所有资源仍走源站,CDN形同虚设。这要求你准确配置ASSET_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 opcache:clear)。
【此验证必须在生产环境(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()传入的参数承担。











