1

我已经建立了一个简单的 Go 静态文件服务器http.FileServer。如果我有一个类似的目录结构public > about > index.html,服务器将正确解析/aboutabout > index.html,但它会添加一个尾部斜杠,因此 url/about/变为

有没有一种简单的方法可以在使用时删除这些斜杠http.FileServer?最终,它可以以任何一种方式工作——如果可能的话,不使用尾部斜杠主要是个人喜好。

4

1 回答 1

1

当您注册/about/路由时,会添加一个隐式路由/about(将客户端重定向到/about/)。

要解决此问题,您可以注册两个显式路由:

  • /about为您服务index.html
  • /about/用于http.FileServer处理页面的任何 HTML 资产

像这样:

// what you had before
h.Handle("/about/",
    http.StripPrefix(
        "/about/",
        http.FileServer(http.Dir("/tmp/about-files")),
    ),
)

// prevents implicit redirect to `/about/`
h.HandleFunc("/about",
    func(w http.ResponseWriter, r *http.Request) {
        http.ServeFile(w, r, "index.html") // serves a single file from this route
    },
)

https://play.golang.org/p/WLwLPV5WuJm

于 2020-06-29T18:58:44.603 回答