为 URL 的所有子目录提供默认页面
来到编程网的大家,相信都是编程学习爱好者,希望在这里学习Golang相关编程知识。下面本篇文章就来带大家聊聊《为 URL 的所有子目录提供默认页面》,介绍一下,希望对大家的知识积累有所帮助,助力实战开发!
问题内容我想以这种方式调用 fileserver
,它为不同目录的所有子目录(subdirs
)提供相同的页面。
当然,这种简单的方法是行不通的:
for _, prefix := range subdirs {
fsdist := http.fileserver(http.dir(defaultpage))
r.pathprefix(prefix).handler(http.stripprefix(prefix, fsdist))
}
因为 /abc/123
映射到 defaultpage/123
而我只需要 defaultpage
。
例如,如果 subdirs := []string{"abc", "xyz"}
,则应如下映射:
abc/xyz => defaultPage
abc/def => defaultPage
xyz/aaa => defaultPage
我知道我需要类似 http.setprefix
或类似的东西,但没有这样的东西。当然,我可以编写自己的处理程序,但我想知道这里的标准方法是什么?
这个任务很常见,我想应该有一些标准化的方法?
正确答案
编辑:多路由支持和静态文件服务:
听起来你只是想要:
r := mux.newrouter()
r.handlefunc("/products", productshandler) // some other route...
staticfilepath := "catch-all.txt"
fh := http.handlerfunc(
func(w http.responsewriter, r *http.request) {
http.servefile(w, r, staticfilepath)
},
)
for _, dir := range []string{"abc", "xyz"} {
r.pathprefix("/" + dir + "/").handler(fh)
}
工作示例(在演示之外运行):https://play.golang.org/p/MD1Tj1CUcEh
$ curl localhost:8000/abc/xyz
catch all
$ curl localhost:8000/abc/def
catch all
$ curl localhost:8000/xyz/aaa
catch all
$ curl localhost:8000/products
product
理论要掌握,实操不能落!以上关于《为 URL 的所有子目录提供默认页面》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注编程网公众号吧!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341