跳转到内容

状态跳转

此页面由 docs/rules/status-redirect.md 自动同步生成。

本章介绍控制 HTTP 状态码和重定向行为的规则。


直接返回指定的 HTTP 状态码,不向后端服务器发送请求。 statusCode 只负责拦截上游请求并生成本地响应,不会短路同一条命中规则里的其他请求/响应改写能力;例如 reqHeadersreqBodyresHeadersresBodyresAppend 等仍会按各自阶段执行,并记录到 Traffic 轨迹中。

pattern statusCode://code
状态码含义场景
200OK成功响应
201Created创建成功
204No Content成功但无内容
301Moved Permanently永久重定向
302Found临时重定向
304Not Modified未修改
400Bad Request请求错误
401Unauthorized未授权
403Forbidden禁止访问
404Not Found未找到
500Internal Server Error服务器错误
502Bad Gateway网关错误
503Service Unavailable服务不可用
Terminal window
# 返回 404
www.example.com/old-page statusCode://404
# 返回 503
www.example.com/maintenance statusCode://503
# 模拟服务器错误
www.example.com/api statusCode://500

⚠️ 注意:小括号内容会作为一个整体解析,可以包含空格;多行 Body 建议使用块变量。

Terminal window
# 返回 404 + 自定义内容(使用块变量)
www.example.com statusCode://404 resBody://{not-found-response}
# 返回 200 + JSON
www.example.com statusCode://200 resBody://({"ok": true})

块变量定义:

``` not-found-response
{"error": "Not Found"}
```
测试场景规则预期
返回 404test.com statusCode://404HTTP 状态码 404
返回 500test.com statusCode://500HTTP 状态码 500
返回 200test.com statusCode://200HTTP 状态码 200
带 Bodytest.com statusCode://404 resBody://(err)404 + Body 为 “err”
组合规则test.com statusCode://451 reqHeaders://X-Debug=1 reqBody://(rewritten) resHeaders://X-Mock=1 resBody://(base) resAppend://(-tail)不请求后端,返回 451 + 响应头 X-Mock: 1 + Body base-tail,Traffic 记录改写后的请求头和请求体

替换后端服务器返回的状态码,请求仍然会发送到后端。

pattern replaceStatus://new_code
规则请求后端使用场景
statusCode❌ 不请求直接 Mock 响应
replaceStatus✅ 请求修改真实响应的状态码
Terminal window
# 将 500 替换为 200
www.example.com replaceStatus://200
# 将任何状态码替换为 404
www.example.com replaceStatus://404

⚠️ 注意includeFilter://s:<code> 状态码过滤器不能用于按后端状态码限定 replaceStatus。规则在请求阶段解析,此时响应状态码尚未知,携带 s: 过滤器的规则会被静默丢弃、替换不会生效。目前唯一可用的形式是无条件的 replaceStatus://<code>

测试场景规则后端返回预期
替换为 200test.com replaceStatus://200500HTTP 200
替换为 404test.com replaceStatus://404200HTTP 404

返回 HTTP 重定向响应,让客户端跳转到新地址。

pattern redirect://target_url
pattern redirect://status_code:target_url
状态码类型说明
301永久重定向SEO 友好,浏览器会缓存
302临时重定向默认值,不缓存
303See Other常用于 POST 后重定向
307Temporary Redirect保持请求方法
308Permanent Redirect永久重定向,保持方法

状态码前缀可以是任意 3xx(300–399)状态码,上表仅列出常用的几个。若前缀不在 3xx 范围(如 redirect://200:url),则会被当作目标 URL 的一部分而非状态码。

Terminal window
# 默认 302 重定向
www.example.com/old redirect://https://www.example.com/new
# 301 永久重定向
www.example.com/legacy redirect://301:https://www.example.com/modern
# 307 临时重定向(保持 POST)
www.example.com/api/v1 redirect://307:https://www.example.com/api/v2
Terminal window
# 使用模板变量(需要反引号)
www.example.com/go redirect://`https://other.com${path}`
# 重定向到不同协议
http://www.example.com redirect://`https://www.example.com${path}`
测试场景规则预期
302 重定向test.com redirect://http://new.com/302 + Location: http://new.com/
301 重定向test.com redirect://301:http://new.com/301 + Location: http://new.com/
307 重定向test.com redirect://307:http://new.com/307 + Location: http://new.com/

状态码规则可以与其他规则组合:

⚠️ 注意:小括号内容会作为一个整体解析,可以包含空格;多行 Body 建议使用块变量。

Terminal window
# 状态码 + Body + 头部(使用块变量)
www.example.com statusCode://404 resBody://{not-found} resHeaders://(X-Error: true)
# 直接响应 + 请求/响应规则流水线
www.example.com statusCode://451 reqHeaders://X-Debug=1 reqBody://(rewritten) resHeaders://X-Mock=1 resBody://(base) resAppend://(-tail)
# CORS:resCors 只对真实上游响应注入 CORS 头部
www.example.com resCors://*
# 替换状态码 + 修改头部
www.example.com replaceStatus://200 resHeaders://(X-Fixed: true)

⚠️ 注意resCors 等响应改写能力不能redirectstatusCode 这类合成响应组合使用。按下方注意事项 #3,redirect 会立即返回重定向响应、后续规则不执行,因此 www.example.com redirect://https://new.com/ resCors://* 只会返回 302 + Location,CORS 头部会被静默丢弃。resCors 只会把 CORS 头部注入到真实上游返回的响应上。

块变量定义:

``` not-found
Not Found
```

  1. statusCode 不请求后端:使用 statusCode 时,请求不会发送到后端服务器
  2. replaceStatus 请求后端:使用 replaceStatus 时,请求会正常发送,只修改返回的状态码
  3. redirect 优先级redirect 会立即返回重定向响应,后续规则不会执行
  4. 状态码与 Body:使用 statusCode 时,默认 Body 为该状态码的标准原因短语(如 404 → Not Found,500 → Internal Server Error;204 等无标准短语的状态码 Body 为空)。如需自定义内容,配合 resBody 覆盖
  5. 规则流水线statusCode 的直接响应仍会执行同一命中规则里的请求头/请求体改写、响应头/响应体改写和脚本规则,但不会建立上游连接
  6. 缓存影响:301 重定向会被浏览器缓存,调试时建议使用 302