Golang Gorilla Mux如何同时匹配带尾斜杠与不带尾斜杠的URL
解决Gorilla Mux路由匹配带/不带尾斜杠的问题
有几种靠谱的方案可以实现需求,直接看具体做法:
方案1:使用StrictSlash选项(官方推荐)
创建路由器时开启StrictSlash(true),它会自动规范化URL的尾斜杠,让带和不带斜杠的请求都能匹配到对应的路由。
示例代码:
// 创建路由器时启用StrictSlash mux1 := mux.NewRouter().StrictSlash(true) // 定义路由(带或不带尾斜杠都可以,两种请求都会匹配) mux1.Handle("/example", handler).Methods("GET") // 或者定义成带尾斜杠的也一样:mux1.Handle("/example/", handler).Methods("GET")
开启后,访问/example或/example/都会命中这个路由,还会自动处理重定向(比如访问不带斜杠的会301到带斜杠的,反之亦然,取决于你定义的路由格式)。
方案2:注册两个路由指向同一个Handler
如果不想用自动重定向,直接给带和不带斜杠的URL都注册同一个处理函数,简单直接:
mux1 := mux.NewRouter() handler := yourHandlerFunc() // 同时注册两个路由 mux1.Handle("/example", handler).Methods("GET") mux1.Handle("/example/", handler).Methods("GET")
这种方式没有重定向,两种URL直接匹配到同一个逻辑,适合不需要规范化URL的场景。
为什么你之前的/example/?写法无效?
Gorilla Mux的路径语法里,?是用来标记查询参数的开始,不是正则意义上的可选字符,所以这种写法不会被解析成“尾斜杠可选”,自然无效。
内容的提问来源于stack exchange,提问作者郭佰胜
相关产品推荐
相关产品推荐

