2分钟
通配符匹配
域名、路径匹配不能满足一些复杂的情况,虽然正则匹配可以解决所有匹配问题,但门槛还是有点高,且涉及转义及设置匹配的起始位置等,对一些常用匹配whistle提供了一些更简单的配置方式,包含通配符匹配,通配域名匹配、通配路径匹配:
通配符匹配:
匹配模式必须以 ^
开头(如果需要限制结束位置可以用 $
),*
为通配符,支持通过$0...9获取通配符匹配的字符串,其中$0表示整个请求url
# 以 ^ 开头
^www.example.com/test/*** referer://http://www.test.com/$1
# 限定结束位置
^www.example.com/test/***test$ referer://http://www.test.com/$1
如果请求url为 https://www.example.com/test/abc?123test
,这第一个配置 $1 = abc?123&test
,第二个配置 $1 = abc?123
,而 https://www.example.com/test/abc?123test2
只能匹配第一个。
通配符在请求url里面的不同位置及个数匹配的字符类型也不一样,一般请求url的结果:
protocol://domain/path?query
完整通配符匹配:
^*://*.test.**.com:*/**?a=*&** opProtocol://opValue($0, $1, ..., $9)
其中:$0表示整个请求url,$1...9分别表示从左到右的通配符串,也可以不指定协议:
^*/cgi-* operatorURI # 相当于 /^\w+:\/\/([^./]*)\/cgi-(.*)/i operatorURI
^**/cgi-* operatorURI # 相当于 /^\w+:\/\/([^/]*)\/cgi-(.*)/i operatorURI
- 如果通配符串在请求url的protocol里面,不管是一个还是多个
*
都只能匹配[a-z\d]*
- 如果通配符串在domain里面,一个
*
表示匹配[^/.]
,两个及以上的*
表示匹配[^/]*
- domain里面的
***.xxx.yyy
相当于**.xxx.yyy
+xxx.yyy
(whistle >= v1.13.3) - 如果通配符串在path里面,一个
*
表示匹配[^/]
,两个*
表示匹配[^?]*
,三个及以上的*
表示匹配.*
- 如果通配符串在query里面,一个
*
表示匹配[^&]
,两个及以上的*
表示匹配.*
通配符匹配支持非匹配
!pattern
学员评价