必须先启用mod_expires和mod_headers模块,在虚拟主机配置中用expiresactive on和expiresbytype设置规则,并补充header set cache-control头;未加载模块或规则位置错误会导致响应头缺失,浏览器无法缓存。

在 Apache 中为静态资源设置更长的过期时间,核心是让浏览器缓存图片、CSS、JS、字体等文件足够久,减少重复请求。但不能只写规则——模块没启用、语法位置错、时间基准用错,都会导致缓存头根本不出现在响应里。
必须先启用两个关键模块
phpEnv 或标准 Apache 都默认不加载缓存相关模块。打开 Apache24\conf\httpd.conf,确认以下两行未被注释且路径正确:
- LoadModule expires_module modules/mod_expires.so
- LoadModule headers_module modules/mod_headers.so
改完后进 Apache24\bin\ 执行 httpd.exe -t 检查语法。若报 “Invalid command 'ExpiresActive'”,说明 mod_expires 没加载成功。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
在虚拟主机内写缓存规则(不是 .htaccess)
phpEnv 的缓存配置必须放在 httpd-vhosts.conf 的 <virtualhost></virtualhost> 块中,并用 <ifmodule mod_expires.c></ifmodule> 包裹:
- 开头必须加 ExpiresActive on
- 对带哈希的 JS/CSS(如
app.a1b2c3.js)用 access 基准:ExpiresByType application/javascript "access plus 1 year" - 对无版本号的
style.css,改用 modification 基准:ExpiresByType text/css "modification plus 2 hours" - 避免用
now plus X—— 它每次请求都重算时间,无法稳定缓存
补上 Cache-Control 头更可靠
仅靠 Expires 不够,现代浏览器更信任 Cache-Control。在同一个 <virtualhost></virtualhost> 里加:
-
Header set Cache-Control "public, max-age=31536000"(1年) - 对内容不变的哈希文件,可加
immutable:Header set Cache-Control "public, immutable, max-age=31536000"
验证是否真生效
别只看配置,要检查实际响应头:
- 用 Chrome DevTools → Network 标签,点开一个 JS 或 PNG 文件
- 查看 Response Headers 是否含 Cache-Control 或 Expires
- 如果只有 Last-Modified/ETag 没有缓存头,说明配置未触发或被覆盖










