actix-web如何创建匹配任意多级斜杠路径的路由(如/starts-with/a/.../e)
问题原因
actix-web 默认的路径参数匹配规则为[^/]+,仅会捕获两个斜杠之间的单个路径段,遇到斜杠就会终止匹配,因此原有写法中的{other_url}只能匹配单段后续路径,无法捕获带斜杠的多级路径。
实现方法
要匹配前缀后任意数量的路径段(包含斜杠),只需修改路径参数的匹配规则,通过.*正则匹配前缀后的所有剩余路径内容即可,和原有代码逻辑兼容,改动最小的实现代码如下:
#[get("/starts-with/{other_url:.*}")] async fn t1(other_url: web::Path<String>) -> impl Responder { other_url.to_string() }
- 匹配效果:请求
/starts-with/a时捕获到的值为a,请求/starts-with/a/b/c/d/e时捕获到的值为a/b/c/d/e,支持任意层级的后续路径匹配。 - 注意事项:如果存在同
/starts-with/前缀的其他精确路由(例如/starts-with/health),需要将精确路由在该通配尾路由之前注册,否则请求会被通配路由提前拦截,无法进入精确路由的处理逻辑。
内容的提问来源于stack exchange,提问作者Max Block
相关产品推荐
相关产品推荐

