在 go/mux 中的第一个匹配后停止匹配
Stop matching after first match in go/mux
我有以下路由器:
func testHttp() {
r := mux.NewRouter()
s := r.PathPrefix("/cmd").Subrouter()
s.HandleFunc("/{cmd}", cmd)
http.Handle("/", r)
http.ListenAndServe(":8090", nil)
}
当我发出诸如 localhost:8090/cmd/ls -la
之类的请求时,cmd 处理程序会正确执行。但是,如果我传入 localhost:8090/cmd/ls -la /home/foo
之类的内容,我会得到 404。这意味着 gorilla/mux 在检测到 / 时会保持匹配。那么我该如何配置它,使特定匹配路径(在本例中为 /cmd/)之后的所有内容都被视为路径的参数?大概我可以求助于使用 GET 参数,但是如果也使用 /rest-endpoint/params-containing/ 可以实现吗?
/ 是 URL 的目录分隔符,所以 mux 所做的是正确的,它分隔和匹配由 / 分隔的段。如果要将 ls -la /home/foo
作为路径参数传递,则应转义 / 字符,并写入 %2F。然后 mux 将 运行 正确。
另一种选择是将处理程序安装到 PathPrefix /cmd/。然后你必须在你的处理程序中解析路径的剩余部分,但你可以按照你想要的方式处理'/'。
我有以下路由器:
func testHttp() {
r := mux.NewRouter()
s := r.PathPrefix("/cmd").Subrouter()
s.HandleFunc("/{cmd}", cmd)
http.Handle("/", r)
http.ListenAndServe(":8090", nil)
}
当我发出诸如 localhost:8090/cmd/ls -la
之类的请求时,cmd 处理程序会正确执行。但是,如果我传入 localhost:8090/cmd/ls -la /home/foo
之类的内容,我会得到 404。这意味着 gorilla/mux 在检测到 / 时会保持匹配。那么我该如何配置它,使特定匹配路径(在本例中为 /cmd/)之后的所有内容都被视为路径的参数?大概我可以求助于使用 GET 参数,但是如果也使用 /rest-endpoint/params-containing/ 可以实现吗?
/ 是 URL 的目录分隔符,所以 mux 所做的是正确的,它分隔和匹配由 / 分隔的段。如果要将 ls -la /home/foo
作为路径参数传递,则应转义 / 字符,并写入 %2F。然后 mux 将 运行 正确。
另一种选择是将处理程序安装到 PathPrefix /cmd/。然后你必须在你的处理程序中解析路径的剩余部分,但你可以按照你想要的方式处理'/'。