织梦css样式缓存刷新办法
织梦改了 CSS 文件,浏览器死活不更新,这是建站过程中最常见的折磨之一。缓存可能卡在浏览器、织梦静态页、CDN、甚至服务器 OPcache 多个环节。要彻底解决,得逐层排查。本文给出从最简单到最彻底的完整方案。
一、缓存不刷新的四大原因
- 浏览器缓存 —— 浏览器为了加速,缓存了旧版 CSS
- 织梦静态页未重新生成 —— HTML 里引用的还是旧 CSS 路径或旧版本号
- CDN 缓存 —— 用了 CDN 但没刷新节点缓存
- 服务器 OPcache —— PHP 字节码缓存导致动态生成的 CSS 版本号不更新
排查顺序建议从上到下,先排除浏览器,再处理织梦,最后看 CDN 和服务器。
一、浏览器层:强制刷新
最快的方法:
- Windows:
Ctrl + F5或Ctrl + Shift + R - Mac:
Cmd + Shift + R - Chrome DevTools 打开后,在刷新按钮上右键 → “清空缓存并硬性重新加载”
如果只是自己测试,这样就能解决。但访客不会强制刷新,所以根本办法是给 CSS 加版本号。
二、核心方案:CSS 加版本号
给 CSS 引用地址加查询参数,浏览器会认为是新文件:
<link rel="stylesheet" href="/style.css?v=20260729">
每次改 CSS 后把 v 值改大,所有访客都会自动加载新版。手动改太麻烦,推荐两种自动化写法:
写法一:用时间戳(织梦模板里)
<link rel="stylesheet"
href="/style.css?v={dede:global.cfg_cmspath/}/css/style.css">
<!-- 或用 PHP -->
<link rel="stylesheet"
href="/style.css?v=<?php echo filemtime(DEDEROOT.'/style.css'); ?>">
filemtime 取文件修改时间戳,CSS 一改动版本号自动变,是最优雅的方案。
写法二:在公共头部 head.htm 里统一管理
<?php
$css_ver=filemtime(DEDEROOT.'/templets/default/style/style.css');
?>
<link rel="stylesheet"
href="/templets/default/style/style.css?v=<?php echo $css_ver; ?>">
这样全站 CSS 引用都用同一个版本号变量,改一处全站生效。
三、织梦静态页重新生成
织梦是静态生成机制,改了模板或 CSS 引用后,必须重新生成 HTML 才能让页面引用新 CSS。操作路径:
- 后台 → 生成 → 更新主页 HTML
- 后台 → 生成 → 更新栏目 HTML(选全部栏目)
- 后台 → 生成 → 更新文档 HTML(按需全量或按时间)
四、CDN 缓存刷新
站点接了 CDN(阿里云、腾讯云、Cloudflare 等)后,CDN 节点会缓存 CSS 文件。即使源站更新了,CDN 节点没刷新,访客拿到的还是旧版。处理方式:
- 登录 CDN 控制台 → 缓存刷新 → 提交 CSS 文件 URL
- 或刷新整个目录
- 设置 CSS 缓存规则时,把带
?v=参数的文件缓存时间设短,或设为不缓存
配合版本号方案,CDN 会把 style.css?v=1 和 style.css?v=2 当作两个不同文件,自动不会命中旧缓存,是最省心的组合。
五、服务器 OPcache 清理
如果用 PHP 动态输出 CSS 版本号,但版本号死活不变,可能是 OPcache 缓存了 PHP 字节码。清理方法:
# 重启 PHP-FPM
systemctl restart php-fpm
# 或在 PHP 里调用清理
<?php
if(function_exists('opcache_reset')){
opcache_reset();
}
?>
宝塔面板用户可在“软件商店 → PHP → 设置 → 缓存组件”里关闭 OPcache 或一键清理。
六、织梦 data/cache 目录清理
织梦自身有标签缓存机制,存在 /data/cache/ 目录。如果 arclist 等标签的输出不更新,清理这个目录:
# 删除缓存文件(保留目录)
rm -f /data/cache/*.cache
rm -f /data/cache/arclist*
或在后台 → 系统 → 清理系统缓存 → 一键清理。注意这个缓存只影响标签输出,不影响 CSS 文件本身,但有时会导致页面 HTML 不更新从而连带 CSS 引用不刷新。
七、调试技巧
- Chrome DevTools → Network → 勾选“Disable cache”,开发时始终禁用缓存
- 看 CSS 文件的 Response Headers,
Cache-Control和ETag决定缓存行为 - 对比源站和 CDN 返回的 CSS 内容是否一致,用
curl -I URL看 headers - 织梦后台的“系统基本参数 → 性能选项”里关闭 arclist 缓存(开发期),上线再开
八、长期预防方案
把 CSS 版本号机制写进模板基线,一劳永逸:
// 在 head.htm 顶部定义
<?php
define('ASSET_VER', filemtime(DEDEROOT.'/style.css'));
?>
// 所有静态资源引用统一用
<link rel="stylesheet" href="/style.css?v=<?php echo ASSET_VER; ?>">
<script src="/main.js?v=<?php echo ASSET_VER; ?>"></script>
这样 CSS 和 JS 任何改动都会自动触发版本号更新,配合 CDN 的“参数差异化缓存”策略,访客永远拿到最新资源。
缓存问题排查时建议养成“自下而上”的习惯:先 curl 直接请求源站确认文件已更新,再过 CDN 看是否一致,最后到浏览器。这样能快速锁定问题出在哪一层,避免在浏览器里反复 Ctrl+F5 浪费时间。把版本号机制固化到模板里,后续改样式就再也不用担心缓存了。