7

我不明白为什么我的静态资源没有被提供。这是代码:

func main() {
    http.HandleFunc("/", get_shows)
    http.HandleFunc("/get",  get_show_json)
    http.HandleFunc("/set", set_shows)
    http.Handle("/css/", http.FileServer(http.Dir("./css")))
    http.Handle("/js/", http.FileServer(http.Dir("./js")))
    http.ListenAndServe(":8080", nil)
}

当我运行程序时,导航到http://myhost.fake/css/http://myhost.fake/css/main.css(它们存在于文件系统中),我收到 404 错误。如果我将“./css”替换为目录的完整路径,情况也是如此。同样适用于 js 静态目录。我的其他处理程序工作正常。我在linux上。谢谢!

4

2 回答 2

13

您的处理程序路径 ( /css/) 被传递给 FileServer 处理程序以及前缀后面的文件。这意味着当您访问http://myhost.fake/css/test.css时,您的 FileServer 正在尝试查找该文件./css/css/test.css

http 包提供了StripPrefix去除/css/前缀的功能。

这应该这样做:

http.Handle("/css/", http.StripPrefix("/css/", http.FileServer(http.Dir("css"))))
于 2013-03-19T19:24:47.783 回答
0

我现在无法验证,但 IIRC: s/"./css"/"css"/; s/"./js"/"js"/.

编辑:现在我终于可以检查来源了:这就是我所做的并且对我有用:

http.Handle("/scripts/", http.FileServer(http.Dir("")))
http.Handle("/images/", http.FileServer(http.Dir("")))

中的所有图像都./images/*.{gif,png,...}可以正确提供。关于脚本的同样的故事。

于 2013-03-19T19:12:16.267 回答