最近我在 seedloc.com这个站点发现首页图片、图标显示不全,开始以为是1panel的WAF问题,一直没有找到解决的方法。另外也有配置 Cloudflare 自定义安全规则(WAF) 时遇到一个奇怪的问题,记录一下,方便以后小白朋友遇到时快速解决。
❗问题起因
为了阻止陌生人直接访问上传接口 /upload,其实也是AI建议的,我其实不知,建议就加了,在 Cloudflare 上添加了下面这条自定义规则:
当请求路径包含 /upload 时
采取动作 → JavaScript 质询(这个规则是为了防止恶意访问上传路径)

❓问题表现
✔ 网站可以正常打开
✔ 后台登录正常
✔ 文章页展示正常
但首页却出现资源丢失:
文章封面图无法显示
卡片缩略图缺失
首页布局看起来不完整
如下图所示(示例):

🧠 为什么会这样?
Cloudflare 的这个规则匹配的是:
http.request.uri.path contains "/upload"这条规则看起来是堵住上传接口,但它却 匹配了所有包含 /upload 的请求,比如:
图片请求
/upload/...webpCSS、JS 静态资源
缩略图接口路径
这些资源请求也会因为匹配 /upload 而被 Cloudflare 拦截或 JS Challenge,从而导致资源加载失败,页面显示异常。
Cloudflare 官方文档中也说明,自定义规则只要匹配到某个条件就会执行指定操作,并且这些规则是按顺序执行的。:contentReference[oaicite:0]{index=0}
🛠 正确且不会误伤资源的规则写法
真正想要的效果是:
✔ 阻止恶意上传行为
✖ 不影响正常资源 GET 请求
所以我们可以更严格地匹配 上传请求(POST):
(http.request.uri.path contains "/upload"
and http.request.method eq "POST")这个表达式只会匹配 POST 请求的上传接口 ,不会匹配普通资源的 GET 请求,从而避免误封。
📌 最终规则截图示例
插入到 Cloudflare Dashboard 的匹配条件框中:
(http.request.uri.path contains "/upload"
and http.request.method eq "POST")动作建议设置为:
👉 托管质询(Managed Challenge)
或根据需要设置为 阻止 Block 。托管质询对于 API 上传请求更安全,不容易误杀正常访问。

📌 修复后首页恢复正常
关闭原规则后,再启用新版条件匹配规则,首页资源恢复正常:

🧾 总结
❌ 错误写法
http.request.uri.path contains "/upload"会误匹配所有静态资源路径,并影响页面显示。
✅ 推荐写法(只匹配上传操作)
(http.request.uri.path contains "/upload"
and http.request.method eq "POST")🔹 只阻止真正的上传 POST 请求
🔹 不影响 GET 资源访问
🔹 兼容 Halo、WordPress、Typecho、任何站点资源加载模式
如果你也在使用 Cloudflare + Halo、并遇到资源加载异常的问题,不妨参考本文做排查和修复。
欢迎在评论区交流!😊
评论