Cloudflare规则怎么写?

chinaz
chinaz 正式会员超兽战士
发布于 2026-10-07 10:52 ·1 浏览 ·0 回复

学完这篇你能得到什么:你能在 Cloudflare 后台独立写出可用的 WAF 自定义规则、重定向规则、URL 重写规则和缓存规则,并知道去哪看命中日志、怎么排查不生效。

第一步:先找到写规则的入口

这一步要做的就是根据你的目的选对规则类型,选错入口会白写。登录 dash.cloudflare.com,选中你的域名,左侧边栏找 Rules(规则)。2025 年新版界面里,这里通常有 Transform Rules(转换规则)、Redirect Rules(重定向规则)、Cache Rules(缓存规则)、Configuration Rules(配置规则)、Origin Rules(源站规则)。安全拦截类规则不在 Rules 里,而是在 Security > WAF > Custom rules。旧版界面叫 Firewall > Firewall Rules,逻辑一样。

注意:Cloudflare 的 Page Rules 已经逐步被上面这些新规则替代,新项目优先用新入口。

第二步:看懂表达式语法

这一步要掌握 Cloudflare 规则表达式的字段和操作符,写完你能自己拼出匹配条件。常用字段:http.request.uri.path(路径)、http.host(域名)、http.request.method(请求方法)、ip.src(访客 IP)、ip.geoip.country(国家代码)、http.user_agent(UA)、http.request.headers["x-api-key"](自定义请求头)。常用操作符:eq 等于、ne 不等于、contains 包含、starts_with 开头、ends_with 结尾、in 属于集合、matches 正则匹配。多个条件用 and、or、not,并且要用括号分组。

例如这条表达式表示“中国或俄罗斯 IP 且访问 wp-login.php”:

(ip.geoip.country in {"CN" "RU"}) and (http.request.uri.path contains "/wp-login.php")

注意:字段名不加引号,字符串值必须加双引号;matches 是正则,写错不会报错但规则不命中,能用 contains 就别用正则。

第三步:写一条 WAF 自定义拦截规则

这一步要做的是拦截恶意请求,做完后命中条件的访客会看到 Cloudflare 拦截页。进入 Security > WAF > Custom rules,点 Create rule。填 Rule name,比如 Block wp-login。在 Edit expression 里粘贴上面的表达式。Choose action 下拉选 Block。点 Deploy,几秒后生效。

注意:免费套餐的自定义规则条数有限,控制台会显示剩余数量;规则默认按列表顺序执行,可以拖动排序。

第四步:写重定向规则

这一步要做的是把旧地址跳到新地址,做完后访客访问旧 URL 会自动跳转。进入 Rules > Redirect Rules > Create rule。匹配表达式写:

http.request.uri.path eq "/old-page"

然后在 URL redirect 里,类型选 Dynamic,目标填:

concat("https://", http.host, "/new-page")

状态码选 301,勾选 Preserve query string,点 Deploy。

注意:301 是永久重定向,浏览器会缓存,测试阶段建议先用 302。

第五步:写 URL 重写规则

这一步要做的是不改浏览器地址、只改回源路径,做完后用户看到的还是原 URL,但源站收到的是新路径。进入 Rules > Transform Rules > Rewrite URL > Create rule。匹配表达式写:

http.request.uri.path matches "^/blog/(.*)"

在 Path 里选 Dynamic,填:

regex_replace(http.request.uri.path, "^/blog/(.*)", "/articles/${1}")

点 Deploy。

注意:重写不是重定向,地址栏不会变;${1} 是捕获组,别写成 $1 或漏掉花括号。

第六步:写缓存规则

这一步要做的是让静态资源在边缘缓存更久,做完后源站压力下降、访问变快。进入 Rules > Cache Rules > Create rule。匹配表达式写:

http.request.uri.path matches "^/static/.*"

Cache eligibility 选 Eligible for cache,Edge TTL 选 Override origin,填 1 year,Browser TTL 也选 Override origin,填 1 year,点 Deploy。

注意:只缓存静态资源,别把 /api/ 或带登录态的路径缓存了,否则会串数据。

第七步:测试和排查

这一步要做的是确认规则到底有没有命中。看拦截日志进 Security > Events,时间范围选最近 30 分钟,看 Action 列是不是 Block。看整体请求走哪条规则,点右上角 Support > Trace,输入完整 URL 和访客 IP,它会告诉你命中了哪条规则、执行了什么动作。也可以用 curl -I https://你的域名/路径 看返回码和响应头。

注意:改完规则必须点 Deploy;如果没生效,先检查表达式里的引号、括号和大小写,再确认规则顺序。

小结

  • 安全拦截进 Security > WAF > Custom rules,重定向、重写、缓存进 Rules。
  • 表达式字段不加引号,字符串值加双引号,多条件用括号和 and/or 分组。
  • 重定向用 Redirect Rules,重写用 Transform Rules,静态资源缓存用 Cache Rules。
  • 写完点 Deploy,用 Security > Events 和右上角 Support > Trace 验证。
  • 免费套餐有规则条数限制,规则按顺序执行,测试阶段优先用 302。
版权声明:本文来自 GJ站长论坛《Cloudflare规则怎么写?》
原文链接:https://www.gj0.com/thread-242.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~