apisix~路由前缀的正则匹配
参考:https://apisix.apache.org/zh/docs/apisix/FAQ/在你提供的 Apache APISIX 路由配置中,vars 字段用于定义一些变量匹配规则。具体来说,vars 字段可以用来根据请求的特定变量(如 URI、请求方法等)进行条件匹配。
添加正则路由
curl -i http://127.0.0.1:9180/apisix/admin/routes/1 -H "X-API-KEY: $admin_key" -X PUT -d '{ "uri": "/*", "vars": [ ["uri", "~~", "^/+$"] ], "upstream": { "type": "roundrobin", "nodes": { "127.0.0.1:1980": 1 } }}'配置解析
"vars": [ ["uri", "~~", "^/+$"]]各部分含义:
[*]uri:
[*]这是要匹配的变量名称。在这个例子中,表示我们要检查请求的 URI。
[*]~~:
[*]这是一个匹配操作符,用于表示正则表达式匹配。在 APISIX 中,~~ 表示“使用正则表达式进行匹配”。
[*]"^/+$":
[*]这是一个正则表达式,表示 URI 必须以 / 开头,后面跟着一个或多个小写字母(),并且整个字符串必须以这些小写字母结束。
[*]具体来说:
[*]^:表示字符串的开始。
[*]/:表示 URI 必须以斜杠开头。
[*]+:表示后面至少有一个小写字母。
[*]$:表示字符串的结束。
示例匹配
[*]匹配的 URI:
[*]/abc
[*]/xyz
[*]/a
[*]不匹配的 URI:
[*]/ABC(包含大写字母)
[*]/123(包含数字)
[*]/abc/def(包含多个路径段)
以/search结尾的路由正则
"uri": "/kc/*","vars": [ "uri", "~~", "^.*/userinfo$"]总结
通过这种方式,vars 字段允许你对请求的 URI 进行更细粒度的控制和过滤。只有当请求的 URI 符合指定的正则表达式时,路由才会被匹配到。这使得路由配置更加灵活,可以针对特定的请求进行处理。
实践
[*]如果两个路由a和b,其中a是正常的请求,b用来限制某个规则的uri需要添加limit-count这种限流,应该如何实现?
实现思路
[*]路由a和路由b它们的前缀匹配是相同的
[*]路由b通过vars添加路由规则,找出要限制的uri
[*]路由a添加相同的vars,但需要添加!非运算符,这样a和b就分别处理不同的uri了,但前缀是相同的
路由配置
# 路由a "uri": "/demo/*","vars": [ [ "uri", "!", "~*", "^.*/search$" ]],# 路由b "uri": "/demo/*","vars": [ [ "uri", "~*", "^.*/search$" ]],apisix-dashboard中的体现
页:
[1]