跳到正文
AtomStorm
工具v1.0发布于 2026-09-09核验于 2026-09-09

_redirects 规则检查器

贴进一份 Cloudflare Pages _redirects 文件,看哪些规则实测会失效——区分标准只有一个:有没有东西会提醒你。危险的那一类会被计为有效,却一次都匹配不上。在页面内运行,无需注册。

本页如何生产

由 AI agent 起草。 由与生产方不同模型族的模型逐条对照来源与原始数据做了对抗式审查,无未决 P0。尚未经人工通读。 证据最近核验于 2026-09-09。

一条明确报错的重定向规则,代价是十分钟。一条无声失效的重定向规则,代价是流量——而你要在三周后从一张图里才知道。

这个检查器把一份 _redirects 文件归进这两堆。

信这个结果之前,先读这段

这个工具知道的一切,都来自一台本地 Cloudflare Pages 模拟器,wrangler 4.65.0,运行于 2026-09-09——一个预先登记的矩阵:48 种规则形态,每种请求三次,四个对照全部通过。

那不是 Cloudflare 生产边缘,本页对它不作任何论断。这里没有一句话说「Cloudflare 不支持 X」;每一条发现说的都是「在这台模拟器上、这一天、这种形态的表现是 Y」。如果某条规则关系到你的流量,检查器只告诉你该去哪儿看——真相得从你自己的部署里拿。

它标出的四种形态

有意思的坐标轴不是这条规则能不能用,而是有没有东西告诉你它不能用

形态部署时会警告吗?请求实际的表现
source //host/path不会404——且 12 条里有 11 条被计为有效
destination //host/path200不会200,响应体是本站自己的首页
source https://host/path会,按行号点名404
destination https://host/…200会,按行号点名404

下面两种也会失效,但失效发生在你眼前:部署的时候 wrangler 会点名文件行号和原因。烦人,但还能活。

上面两种,才是这个工具存在的理由。

没有任何东西会提醒你的那一种

写成 //example.com/pricing/ 的 source 看起来像个路径——它以斜杠开头,所以能过「必须是相对路径」那道检查。矩阵里,这种规则 12 条全部 404,其中 11 条在任何一层都没有产生诊断。这 11 条被计进了 wrangler 自己的 Parsed N valid 计数:被当作有效规则收下,永远匹配不上任何东西。第 12 条在解析期被点名了——点的是它的 destination,不是 source。

比失效更糟的那一种

/promo/ //cdn.example.com/promo/ 200 返回了 HTTP 200。看起来代理生效了。响应体逐字节就是本站自己的根 index.html——根本不是那台远端主机。

断言「200 OK」的冒烟测试会放过它。人点一下链接,会看到一个页面。只有逐字节比对才抓得住。

这两种都是把整个矩阵跑完才发现的,不是先怀疑再去验的。截至 2026-09-09 读到的 Cloudflare _redirects 文档里,两种形态都没有出现——它们不是文档记录的特性。 解析器为什么接受它们,我们没有核验:我们读的是它的输出,不是它的源码。

它不检查什么

splat source/a/*)在矩阵里,表现与写法一致。不在矩阵里的是:destination 侧的 :splat / :name 替换、查询串、规则顺序、遮蔽,以及单文件规则数上限。检查器对这些刻意保持沉默:一个靠猜的检查器,比一个明说自己边界的检查器更糟。

一个跑通的例子

把下面这段贴进去(它同时也是一份可下载的文件):

# marketing redirects
/blog/* /journal/:splat 301
//example.com/pricing/ /plans/ 301
/docs/ https://docs.example.com/ 200
https://example.com/old-home/ / 301
/promo/ //cdn.example.com/promo/ 200
/beta/ /product/

你会得到这个——下面这段是用工具自己的逻辑跑上面那几行生成出来的,不是手写的:

检查了 6 条规则——2 条会无声失效,2 条会明确报错。

无声失效——没有任何东西会告诉你它坏了:
  L3: //example.com/pricing/ /plans/ 301
    → 协议相对 source。实测中该形态的 12 条规则一条都没匹配上;其中 11 条被计为有效,且在任何一层都不报警。
    ✎ 去掉主机名:source 写成单斜杠开头的站内相对路径。
  L6: /promo/ //cdn.example.com/promo/ 200
    → 协议相对目的地 + 200。实测中该形态的 2 条规则都返回 200,但内容是站点自己的首页。
    ✎ 200 的目的地必须是本站路径。要把访客送到别的主机,改用 301 或 302 + 完整 https:// URL。

明确失效——wrangler 会在解析期点名:
  L4: /docs/ https://docs.example.com/ 200
    → 跨源目的地 + 200。实测中仅有此一处缺陷的 2 条规则都在解析期被点名拒绝,请求落 404。
    ✎ 跨源要用跳转而非代理:状态码改成 301 或 302(矩阵中两者均生效),或改为代理到本站路径。
  L5: https://example.com/old-home/ / 301
    → 绝对 URL source。实测中该形态的 12 条规则全部在解析期被点名跳过,请求落 404。
    ✎ 去掉协议与主机名:source 是本站的一个路径,不是一个 URL。

值得知道:
  L7: /beta/ /product/
    → 未写状态码——取文档默认值 302(临时)。实测中 6 条此类规则全部返回 302。
    ✎ 若这是永久迁移,请显式写 301——302 等于告诉搜索引擎保留旧 URL。

对照 wrangler 4.65.0 local Pages emulator 于 2026-09-09 实测的形态检查——48 rule shapes × 3 requests (144), controls C1–C4 pass。非生产环境 Cloudflare 边缘。atomstorm.ai/zh/tools/redirects-rule-linter/

适用范围那一行就写在报告里,所以把结果贴进工单时,这条限定也跟着走。

贴进一份 `_redirects` 文件

已解析 0 条规则

不会上传——检查在本页内完成。注释与空行会被忽略,与 Cloudflare Pages 的处理一致。

我们核验了什么,没核验什么

  • 已核验。 上面四种形态,每种观测三次,144 次请求结果完全一致,跑在 wrangler 4.65.0 上,四个对照全部通过。解析期的报错信息是从运行日志里逐字抄的。 速查卡带的范围说明与本页相同。
  • 未核验。 Cloudflare 生产边缘——没测过,也没作论断。其他 wrangler 版本。矩阵 之外的任何形态。还有你的规则到底有没有进构建产物——这是每一个重定向 bug 的另一 半,也是任何检查器都看不见的。

来源