如何在Actix中匹配`/foo.*`前缀路径?
Actix路由匹配问题解决方法
你遇到的问题是使用scope("/foo")搭配default_service时,无法处理/foo/路径,以下是两种可行的解决方案:
方案一:在Scope中显式处理根路径
在/foo的scope下,给根路径(对应请求路径/foo/)单独添加路由,再配合default_service覆盖其他情况:
.service( actix_web::web::scope("/foo") .route("/", web::to(on_foo)) // 专门匹配/foo/ .default_service(web::to(on_foo)) // 匹配/foo和/foo/之后的任意路径 )
方案二:使用通配符路由(更简洁)
直接通过单个通配符路由匹配所有以/foo开头的请求,包括/foo、/foo/以及/foo/后续带任意内容的路径:
.service( web::resource("/foo{tail:.*}").to(on_foo) )
这里的{tail:.*}是通配符捕获,会匹配/foo之后的所有内容(包括空字符串,对应/foo本身;也包括/,对应/foo/)。由于你在处理函数中是通过req.path()获取完整原始路径,这个捕获的tail参数完全可以忽略,不影响转发逻辑。
内容的提问来源于stack exchange,提问作者Yuri Astrakhan
相关产品推荐
相关产品推荐

