没有提供http静态目录

时间:2013-03-19 19:02:48

标签: linux http web-applications filesystems go

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

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上。谢谢!

2 个答案:

答案 0 :(得分: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"))))

答案 1 :(得分: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,...}中的所有图片都能正常投放。关于脚本的故事。