Skip to content

[URL Rewrite] URL 重写 ​

本节用于配置基于正则表达式的 URL 改写、HTTP 重定向与请求拒绝。

URL 重写在路由分流和建立上游连接前执行,支持内部修改请求 URL、向客户端返回 302/307 重定向,或直接拒绝请求。

HTTPS 流量需先在 MITM 中配置解密后方可应用重写规则。

语法声明 ​

本章节每行定义一条 URL 重写规则,参数之间使用空格分隔:

ini
[URL Rewrite]
pattern replacement [type]

行内结构拆解如下:

  • pattern:正则表达式,匹配完整的 HTTP 请求 URL。
  • replacement:替换后的目标 URL 字符串,或作为语法占位的标记符。
  • [type]:重写动作类型,属于可选参数;未指定时默认作为 header 内部改写生效。

重写类型与行为 ​

  • header(省略类型时的默认项) 内部改写。将发往上游的请求 URL 替换为 replacement;后续规则匹配与连接建立基于改写后的 URL 进行。
  • 302(显式指定) 临时重定向。向客户端返回 HTTP 302 Found 响应,并在 Location 头中携带替换后的 URL。
  • 307(显式指定) 临时重定向并保持请求方法。向客户端返回 HTTP 307 Temporary Redirect 响应,并在 Location 头中携带替换后的 URL。
  • reject(显式指定) 拒绝请求并关闭连接。语法上要求保留位置参数,通常在 replacement 位置填充 - 占位。

捕获组与运行机制 ​

  1. 正则捕获组引用:replacement 字段支持使用 $1、$2 等变量引用 pattern 正则表达式中由圆括号捕获的分组内容,实现路径与参数的动态映射组合。
  2. 首匹配原则:规则自上而下按顺序逐行匹配。请求 URL 一旦命中某条规则,立即执行相应的重写或拦截动作,不再继续匹配后续的 URL 重写规则。
  3. 管线协作:经过 header 改写后的请求,将带着新的 URL 继续进入后续的 Header Rewrite、Response 与 Rule 分流流程。

配置示例 ​

基础配置 ​

ini
[URL Rewrite]
# 将 HTTP 请求临时重定向至 HTTPS(302)
^http://(www\.)?example\.com/(.*) https://example.com/$2 302

# 内部重写请求路径(header)
^https?://api\.example\.com/v1/(.*) https://api.example.com/v2/$1 header

# 临时重定向并保留原始请求方法(307)
^https?://service\.example\.com/submit$ https://service.example.com/v2/submit 307

# 拦截指定路径请求(reject)
^https?://tracking\.example\.com/analytics/ - reject