Cloudflare规则怎么写?
学完这篇你能得到什么:你能在 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。
原文链接:https://www.gj0.com/thread-242.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。