你的重定向可能会干扰 Cloudflare 产品和功能(例如质询)。请考虑在规则表达式中排除 /cdn-cgi/* URI 路径,以避免问题。或者,你也可以仅排除子路径(例如 /cdn-cgi/challenge-platform/*),以避免与特定功能产生问题(在本例中为 Cloudflare 质询)。
你可能还希望排除多个验证服务使用的 /.well-known/* URL 路径。请参阅 重定向与 HTTP DCV 等验证流程之间的交互 了解更多信息。
如果你对已启用一个或多个 Rules 功能的给定 URI 路径发出质询,则应在规则表达式中排除以 /cdn-cgi/challenge-platform/ 开头的 URI 路径,以避免质询循环。
例如,使用 and 运算符和 starts_with() 函数为规则定义复合表达式:
<OTHER_RULE_CONDITIONS> and not starts_with(http.request.uri, "/cdn-cgi/challenge-platform/")验证流程中使用的路径(例如自定义主机名验证(Cloudflare for SaaS)、Pages 域名验证 或 HTTP 域名控制验证 (DCV))可能会受到重定向的影响。
请考虑从规则中排除 /.well-known/* URI 路径,以避免问题。
Cloudflare 可能会从交付给网站访问者的响应中移除 Content-Length 标头。如果访问者必须收到 Content-Length 标头,请将源服务器配置为在响应中包含 cache-control: no-transform HTTP 标头。
如果你的规则表达式匹配的主机名既没有创建 DNS 记录,也没有启用通过 Cloudflare 代理流量,你将看到一个弹出窗口,其中包含几个选项:
- 如果该主机名不存在 DNS 记录:是继续创建规则,还是为该主机名创建新的已代理 DNS 记录。
- 如果该主机名存在 DNS 记录,但流量未通过代理:是继续创建规则,还是为现有 DNS 记录启用代理。
如果你选择创建新的 DNS 记录,新记录将带有 rules 标签以及以下关联注释:
Created during Cloudflare Rules deployment process for <RULE_NAME>如果你使用 URL 重写 重写 URI 路径,这可能会影响稍后执行的其他 Rules 功能(例如 Origin Rules)——如果它们在筛选表达式中包含 URI 路径。
考虑以下 origin rule 配置:
- 规则表达式:
http.host == "example.com" and starts_with(http.request.uri.path, "/downloads/") - Host header(主机标头) > Rewrite to(重写为):
assets.example.com
如果你配置具有以下配置的新 URL 重写:
- 规则表达式:
http.host == "example.com" and starts_with(http.request.uri.path, "/downloads/") - Path(路径) > Rewrite to(重写为) > Dynamic(动态):
regex_replace(http.request.uri.path, "^/downloads/", "/")
origin rule 将不再匹配 /downloads/* 路径,因为 URL 重写在 Origin Rules 之前运行,URI 路径将从 "/downloads/" 重写为 "/"。
为防止出现这种情况,请在规则表达式中使用原始字段 (raw fields)。原始字段在整个请求评估工作流中是不可变的,并且不受先前匹配规则的操作影响。
在当前示例中,你可以在两条规则中使用 raw.http.request.uri.path 字段:
URL 重写
- 规则表达式:
http.host == "example.com" and starts_with(raw.http.request.uri.path, "/downloads/") - Path(路径) > Rewrite to(重写为) > Dynamic(动态):
regex_replace(raw.http.request.uri.path, "^/downloads/", "/")
Origin rule
- 规则表达式:
http.host == "example.com" and starts_with(raw.http.request.uri.path, "/downloads/") - Host header(主机标头) > Rewrite to(重写为):
assets.example.com
这样,两条规则将按预期工作。此外,即使第一条规则正在更新 URI 路径值,这也允许你在两条规则中使用相同的表达式。
有关原始字段列表,请参阅 Fields 参考。