lxl 发表于 2025-2-7 02:05:43

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]
查看完整版本: apisix~路由前缀的正则匹配