You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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,提问作者郭佰胜

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 16:27:13