Cloudflare 页面规则与转换规则的执行顺序由系统架构固定,用户无法直接调整两者之间的优先级。页面规则属于 legacy 功能,通常在请求处理流程的早期阶段执行,而转换规则属于规则集引擎,执行阶段较晚。建议优先使用转换规则重构配置,避免混合使用导致冲突。
先说结论:页面规则优先级高于转换规则,但两者混合使用易引发不可控行为,建议迁移至转换规则。
- 适合:需要管理 URL 重写、重定向或标头修改且希望长期维护的配置场景。
- 先准备:登录 Cloudflare 仪表盘,导出当前页面规则列表,确认是否存在与转换规则匹配条件重叠的规则。
- 验收:禁用冲突的页面规则后,使用 curl 命令验证响应头或重定向行为是否符合转换规则预期。
快速处理思路
此配置主要在 Cloudflare 仪表盘操作,无命令行接口可直接调整优先级,请按以下思路处理。
1. 登录 Cloudflare 仪表盘,进入 Rules > Page Rules 检查现有规则。
2. 进入 Rules > Transform Rules 检查现有的重写或标头修改规则。
3. 若发现匹配条件重叠,优先保留转换规则,禁用或删除对应的页面规则。
4. 在测试环境中验证变更,确认业务流量未受影响后再全量发布。
为什么会这样
Cloudflare 的产品架构决定了页面规则在请求处理链路中执行得更早。页面规则是 Cloudflare 早期的配置产品,设计用于简单的缓存、重定向和转发逻辑。转换规则是后续推出的规则集引擎的一部分,支持更复杂的请求修改和响应操作。根据 Cloudflare 官方文档关于操作顺序的描述,页面规则通常在 WAF 和规则集引擎之前评估。当两者针对同一请求匹配时,页面规则的动作会先生效,可能导致转换规则无法按预期执行或被覆盖。
分步处理
步骤 1:识别冲突规则
在 Cloudflare 仪表盘中,逐一检查页面规则的匹配条件(URL 模式)。对比转换规则中的筛选表达式。如果两者针对相同的域名或路径设置了不同的重定向或标头修改,即视为冲突。
步骤 2:迁移配置逻辑
将页面规则中的功能逻辑转换为转换规则配置。例如,将页面规则的"Forwarding URL"功能迁移至转换规则中的"Rewrite URL"或"Redirect Rule"。注意转换规则支持更细致的条件判断,可利用此优势优化配置。
步骤 3:禁用旧规则
在确认转换规则已生效且测试无误后,将对应的页面规则状态改为"Disabled"。不要立即删除,保留至少 24 小时观察期,以便出现异常时可快速回滚。
步骤 4:清理冗余
观察期结束后,若无反复,可彻底删除已禁用的页面规则,减少规则集复杂度。
怎么验证是否生效
方法 1:使用 curl 检查响应头
在终端执行curl -I https://your-domain.com/path。检查返回的 HTTP 状态码和 Location 头是否符合转换规则的设定,而非页面规则的设定。
方法 2:查看 Cloudflare 日志
进入 Cloudflare 仪表盘 Analytics & Logs > Security Events 或 HTTP Logs。筛选特定请求,查看触发的是 Page Rule 还是 Transform Rule 动作。
方法 3:浏览器开发者工具
打开浏览器 Network 面板,发起请求,查看请求详情页的 Remote Address 和 Response Headers,确认重定向路径是否正确。
常见坑
缓存规则干扰
页面规则常用于设置缓存级别。若迁移至转换规则时未同步调整缓存规则,可能导致资源缓存失效或过期时间不符合预期。需同时在 Caching > Cache Rules 中确认配置。
重定向循环
若页面规则和转换规则都设置了重定向,且目标地址相互指向,可能引发 301/302 循环。禁用页面规则前务必确认转换规则的目标地址是终态。
子域名继承问题
页面规则支持通配符匹配子域名。转换规则的条件表达式需显式配置 hostname 匹配逻辑,迁移时容易遗漏子域名场景,导致部分流量未按预期处理。
常见问题
能否手动调整页面规则与转换规则的优先级?
不能,执行顺序由 Cloudflare 系统架构固定,用户无法干预。
如果两者同时匹配,哪个会生效?
页面规则会先生效,因为它在请求处理链路中处于更早的阶段。
迁移到转换规则会影响现有缓存吗?
不会直接影响已缓存内容,但新请求的缓存行为取决于是否同步配置了缓存规则。
参考来源
- Cloudflare Official Documentation, "Page Rules", https://developers.cloudflare.com/rules/page-rules/
- Cloudflare Official Documentation, "Transform Rules", https://developers.cloudflare.com/rules/transform/
- Cloudflare Official Documentation, "Order of operations", https://developers.cloudflare.com/ruleset-engine/rules-language/operations/