我有一个以~* /api/v1/(?<endpoint>.*)
开头的路径。但我意识到这可能会被滥用。有没有一种方法可以将/api/v1
之后的路径段数量限制为3,同时仍然能够保留任何GET变量(如果有的话)?
这些都会过去:
/api/v1/foo
个/api/v1/foo/bar
个/api/v1/foo/bar/baz
个/api/v1/foo/bar/baz?x=hello&y=world
个
这些不会:
/api/v1/foo/bar/baz/aaa
个/api/v1/foo/bar/baz/aaa/n
个
我只看到了3个路径段max after/api/v1
。超过这个值就不应该匹配了。这在location块中可能吗?我愿意接受建议。
在此之后,我在捕获组上使用proxy_pass
将其与可能存在的任何GET变量一起传递给FastAPI后端沿着,以便/api/v1/foo/bar
作为/foo/bar
接收。
**更新:**增加了我之前忘记的GET变量。
1条答案
按热度按时间bvn4nwqk1#
查看问题中的正则表达式,您需要将
.*
序列(匹配任何内容)更改为仅匹配一个、两个或三个路径元素的序列。举例来说:
字符串
为了完整起见,在匹配整个字符串时,应该使用
^
和$
锚点。* 请注意,查询字符串不是location语句测试的规范化URI的一部分。*最后,Nginx要求任何包含大括号的表达式都用引号保护。
因此,您可以使用以下正则表达式位置来仅匹配允许的URL:
型
路径元素过多的URL将被其他位置块处理。通常,如果没有正则表达式位置与URL匹配,则将使用具有最长匹配前缀的前缀位置。
因此,以下前缀位置将匹配任何以
/api/v1/
开头但不匹配以上正则表达式位置的URL,包括那些路径元素过多的URL:型