Cloudflare 设置忽略查询字符串需在页面规则中配置自定义缓存 Key,适用于静态资源版本控制场景,动态页面慎用以免功能异常。
先说结论:通过 Page Rules 或 Cache Rules 设置 Cache Key 排除查询字符串,可提升静态资源缓存命中率,但动态页面依赖查询参数时会导致内容错误。
- 适合:带版本号的静态文件(如 style.css?v=1)、不依赖参数的动态页
- 先准备:确认业务逻辑不依赖 URL 查询参数传递状态
- 验收:通过浏览器开发者工具验证响应头与缓存状态
快速处理思路
Cloudflare 控制台不支持全局一键忽略查询字符串,需针对特定 URL 模式创建规则。优先使用 Cache Rules(新架构),若需自定义 Cache Key 细节可使用 Page Rules。操作路径为 Dashboard → Rules → Page Rules → Create Page Rule,在缓存设置中选择排除查询字符串。
为什么会这样
默认情况下 Cloudflare 将查询字符串视为缓存 Key 的一部分,不同参数会被当作不同资源处理。忽略查询字符串能让基础 URL 相同的请求共享同一份缓存,减少回源请求。但动态页面常利用查询字符串区分用户状态或内容分页,忽略后可能导致用户看到错误数据或缓存污染。
分步处理
步骤 1:登录 Cloudflare 控制台,选择目标站点,进入 Rules 菜单下的 Page Rules 页面。
步骤 2:点击 Create Page Rule,在 URL 匹配框输入需要优化的路径模式,例如 *example.com/static/* 或 *example.com/*.css。
步骤 3:点击 Add a Setting,选择 Cache Level 设为 Cache Everything(若需缓存动态内容)或 Standard。
步骤 4:再次点击 Add a Setting,找到 Cache Key 选项,设置 Exclude Query String 为 Enabled,确保基础 URL 相同但参数不同的请求命中同一缓存。
步骤 5:保存并部署规则,注意规则顺序,排除动态路径的 Bypass 规则需置于缓存规则之后。
怎么验证是否生效
打开 Chrome 开发者工具 Network 面板,刷新页面,选中目标资源文件。查看 Response Headers 中的 cache-control 字段,确认 max-age 值符合预期。检查状态码,第二次请求应显示 200 (from disk cache) 或 304 Not Modified。对比带不同查询参数的同一 URL,确认 CF-Cache-Status 均为 HIT。
常见坑
动态功能失效:若登录态、分页或筛选功能依赖查询字符串,忽略后会导致所有用户看到相同内容。建议仅对静态资源目录启用,对 /api/ 或 /user/ 路径设置 Bypass 缓存。
规则顺序错误:Page Rules 按从上到下顺序匹配,若 Bypass 规则排在 Cache Everything 之前,缓存规则将不生效。务必将排除规则置于缓存规则下方。
缓存更新延迟:修改规则后边缘节点同步需要时间,验证前建议先 Purge Cache 清除旧缓存,避免测试结果受旧数据干扰。
常见问题
忽略查询字符串会影响 SEO 吗?
通常不会,搜索引擎主要抓取基础 URL,但需确保不同参数不代表独立内容页,否则可能导致收录混乱。
免费套餐支持自定义缓存 Key 吗?
支持,免费套餐可在 Page Rules 中配置 Cache Level 和 Browser Cache TTL,部分高级 Cache Key 功能可能需要付费计划。
如何区分静态和动态资源路径?
静态资源通常集中在 /static/、/assets/、/wp-content/ 目录,动态交互多位于 /api/、/admin/ 或含 .php 后缀的路径,建议分别设置规则。
参考来源
- 来源名:你的知识库,页面标题:Cloudflare 免费计划下的自定义缓存 Key 指南
- 来源名:你的知识库,页面标题:Cloudflare 免费 CDN 如何配置浏览器缓存?客户端加载优化设
- 来源名:你的知识库,页面标题:WordPress 安全加速:Cloudflare + Nginx 缓存优化方案