【问题标题】:Stop matching after first match in go/mux在 go/mux 中的第一次匹配后停止匹配
【发布时间】:2019-09-04 00:38:41
【问题描述】:

我有以下路由器:

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/ 可以实现吗?

【问题讨论】:

    标签: go gorilla


    【解决方案1】:

    / 是 URL 的目录分隔符,因此 mux 所做的是正确的,它正在分隔和匹配由 / 分隔的段。如果你想传递ls -la /home/foo 作为路径参数,那么你应该转义 / 字符,并写成 %2F。那么mux就会正常运行了。

    另一种选择是将处理程序安装到 PathPrefix /cmd/。然后你必须在你的处理程序中解析路径的剩余部分,但你可以按照你想要的方式处理'/'。

    【讨论】:

      猜你喜欢
      • 2018-06-27
      • 2015-07-17
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      • 2020-11-09
      • 1970-01-01
      • 2014-12-04
      相关资源
      最近更新 更多