[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位置填充-占位。
捕获组与运行机制
- 正则捕获组引用:
replacement字段支持使用$1、$2等变量引用pattern正则表达式中由圆括号捕获的分组内容,实现路径与参数的动态映射组合。 - 首匹配原则:规则自上而下按顺序逐行匹配。请求 URL 一旦命中某条规则,立即执行相应的重写或拦截动作,不再继续匹配后续的 URL 重写规则。
- 管线协作:经过
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