匹配模式
此页面由
docs/pattern.md自动同步生成。
pattern 是 Bifrost 规则中的第一部分,用于匹配请求 URL。
Pattern 类型
Section titled “Pattern 类型”Bifrost 支持五种 Pattern 类型,系统会按以下顺序自动检测:
| 类型 | 触发条件 | 优先级范围 |
|---|---|---|
| Regex | 以 / 开头且以 /、/i、/u、/iu 结尾 | 80 |
| PathWildcard | 以 ^ 开头 | 60-70 |
| IP | 符合 IPv4/IPv6/CIDR 格式 | 70-95 |
| Wildcard | 包含 *、? 或以 $ 开头 | 40-60 |
| Domain | 默认类型 | 100-130 |
所有类型均支持 ! 前缀表示否定匹配。
Domain 匹配
Section titled “Domain 匹配”精确匹配域名、端口和路径。
[protocol://]domain[:port][/path]| 格式 | 说明 |
|---|---|
http:// | 仅匹配 HTTP |
https:// | 仅匹配 HTTPS |
ws:// | 仅匹配 WebSocket |
wss:// | 仅匹配 WSS |
tunnel:// | 仅匹配隧道代理 |
http*:// | 匹配 HTTP 和 HTTPS |
ws*:// | 匹配 WS 和 WSS |
// | 匹配所有协议 |
| 无协议 | 匹配所有协议 |
| 格式 | 示例 | 说明 |
|---|---|---|
* | example.com:* | 匹配任意端口(必须有端口) |
8* | example.com:8* | 匹配以 8 开头的端口 |
*80 | example.com:*80 | 匹配以 80 结尾的端口 |
8*8 | example.com:8*8 | 匹配 88、808、8008 等 |
| 格式 | 说明 |
|---|---|
/path | 匹配该路径及其子路径 |
/path/* | 匹配该路径前缀 |
示例:
example.com/api # 匹配 /api、/api/users、/api?q=1example.com/api/* # 匹配 /api/ 开头的所有路径https://example.com:8443/api # 完整匹配匹配 IP 地址或 CIDR 网段。
| 格式 | 示例 | 说明 |
|---|---|---|
| IPv4 | 192.168.1.1 | 精确 IP |
| IPv6 | ::1、2001:db8::1 | 精确 IP |
| CIDR | 192.168.0.0/16、10.0.0.0/8 | 网段匹配 |
Wildcard 匹配
Section titled “Wildcard 匹配”域名通配符匹配,自动识别包含 *、? 或以 $ 开头的 pattern。
| 通配符 | 说明 | 示例 |
|---|---|---|
* | 匹配单级(不含 .) | *.example.com 匹配 www.example.com,不匹配 a.b.example.com |
** | 匹配多级(含 .) | **.example.com 匹配 a.b.c.example.com |
? | 匹配单个字符 | example?.com 匹配 example1.com |
$ | 域名通配符前缀 | $example.com 匹配 http(s)://example.com 及其路径 |
*.example.com # 单级子域名**.example.com # 多级子域名*example* # 包含 exampleexample.*/api/* # 域名后缀 + 路径$*.example.com # 域名通配符,匹配单级子域名的所有路径$**.example.com # 域名通配符,匹配多级子域名的所有路径PathWildcard 匹配(^ 前缀)
Section titled “PathWildcard 匹配(^ 前缀)”路径通配符匹配,以 ^ 开头显式声明。支持三种级别的通配符:
| 通配符 | 正则等价 | 说明 |
|---|---|---|
* | [^?/]* | 单级路径(不含 / 和 ?) |
** | [^?]* | 多级路径(不含 ?) |
*** | .* | 任意字符(含 / 和 ?) |
^example.com/api/*/info # 匹配 /api/users/info,不匹配 /api/a/b/info^example.com/api/** # 匹配 /api/a/b/c,不匹配 /api/a?q=1^example.com/api/*** # 匹配任意内容,包括 /api/a/b?q=1Regex 匹配
Section titled “Regex 匹配”正则表达式匹配,语法与 JavaScript 正则兼容。
/pattern/[flags]| Flag | 说明 |
|---|---|
i | 大小写不敏感 |
u | Unicode 模式 |
/\.example\.com/ # 匹配 .example.com/api\/v\d+/i # 大小写不敏感匹配/测试/u # Unicode 匹配所有类型均支持 ! 前缀表示否定:
!example.com # 排除 example.com!192.168.0.0/16 # 排除内网 IP!*.internal.com # 排除 internal.com 子域名!/\.test\./ # 排除包含 .test. 的 URLWildcard、PathWildcard 和 Regex 支持捕获组,通过 $1-$9 引用:
Wildcard 传值
Section titled “Wildcard 传值”*.example.com file:///data/$1 # $1 = 子域名example.*/api/* file:///mock/$1/$2 # $1 = TLD, $2 = 路径PathWildcard 传值
Section titled “PathWildcard 传值”^example.com/api/*/info file:///mock/$1.json # $1 = 单级路径^example.com/*/* file:///data/$1/$2 # $1, $2 = 各级路径Regex 传值
Section titled “Regex 传值”/api\/v(\d+)\/users\/(\d+)/ reqHeaders://X-Version=$1&X-ID=$2规则按优先级从高到低匹配:
| 类型 | 优先级 | 说明 |
|---|---|---|
| Domain(完整) | 130 | 协议 + 端口 + 精确路径 |
| Domain(基础) | 100 | 仅域名 |
| IP(精确) | 95 | 单个 IP |
| Regex | 80 | 正则表达式 |
| IP(CIDR) | 70-78 | 按前缀长度 |
| PathWildcard | 60-70 | * > ** > *** |
| Wildcard | 40-60 | 按类型 |
example.com proxy://127.0.0.1:8080http*://api.example.com cache://3600//example.com:8*/api/* file:///mock192.168.1.1 proxy://127.0.0.1:300010.0.0.0/8 log://!192.168.0.0/16 proxy://external*.example.com proxy://127.0.0.1:8080**.cdn.example.com cache://86400$api.example.com file:///mock路径通配符匹配
Section titled “路径通配符匹配”^example.com/api/*/info file:///mock/$1.json^example.com/static/** cache://3600^api.example.com/v*/users/*** log:///^https?:\/\/.*\.example\.com/ proxy://127.0.0.1:8080/\/api\/v(\d+)\// reqHeaders://X-Version=$1/\.(jpg|png|gif)$/i cache://86400