Skip to content

匹配模式

此页面由 docs/pattern.md 自动同步生成。

pattern 是 Bifrost 规则中的第一部分,用于匹配请求 URL。

Bifrost 支持五种 Pattern 类型,系统会按以下顺序自动检测:

类型触发条件优先级范围
Regex/ 开头且以 //i/u/iu 结尾80
PathWildcard^ 开头60-70
IP符合 IPv4/IPv6/CIDR 格式70-95
Wildcard包含 *? 或以 $ 开头40-60
Domain默认类型100-130

所有类型均支持 ! 前缀表示否定匹配。

精确匹配域名、端口和路径。

[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 开头的端口
*80example.com:*80匹配以 80 结尾的端口
8*8example.com:8*8匹配 88、808、8008 等
格式说明
/path匹配该路径及其子路径
/path/*匹配该路径前缀

示例

example.com/api # 匹配 /api、/api/users、/api?q=1
example.com/api/* # 匹配 /api/ 开头的所有路径
https://example.com:8443/api # 完整匹配

匹配 IP 地址或 CIDR 网段。

格式示例说明
IPv4192.168.1.1精确 IP
IPv6::12001:db8::1精确 IP
CIDR192.168.0.0/1610.0.0.0/8网段匹配

域名通配符匹配,自动识别包含 *? 或以 $ 开头的 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* # 包含 example
example.*/api/* # 域名后缀 + 路径
$*.example.com # 域名通配符,匹配单级子域名的所有路径
$**.example.com # 域名通配符,匹配多级子域名的所有路径

路径通配符匹配,以 ^ 开头显式声明。支持三种级别的通配符:

通配符正则等价说明
*[^?/]*单级路径(不含 /?
**[^?]*多级路径(不含 ?
***.*任意字符(含 /?
^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=1

正则表达式匹配,语法与 JavaScript 正则兼容。

/pattern/[flags]
Flag说明
i大小写不敏感
uUnicode 模式
/\.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. 的 URL

Wildcard、PathWildcard 和 Regex 支持捕获组,通过 $1-$9 引用:

*.example.com file:///data/$1 # $1 = 子域名
example.*/api/* file:///mock/$1/$2 # $1 = TLD, $2 = 路径
^example.com/api/*/info file:///mock/$1.json # $1 = 单级路径
^example.com/*/* file:///data/$1/$2 # $1, $2 = 各级路径
/api\/v(\d+)\/users\/(\d+)/ reqHeaders://X-Version=$1&X-ID=$2

规则按优先级从高到低匹配:

类型优先级说明
Domain(完整)130协议 + 端口 + 精确路径
Domain(基础)100仅域名
IP(精确)95单个 IP
Regex80正则表达式
IP(CIDR)70-78按前缀长度
PathWildcard60-70* > ** > ***
Wildcard40-60按类型
example.com proxy://127.0.0.1:8080
http*://api.example.com cache://3600
//example.com:8*/api/* file:///mock
192.168.1.1 proxy://127.0.0.1:3000
10.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
^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