去:HTTP静态目录不被服务

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

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”replace为目录的完整path,情况也是如此。 同上的js静态目录。 我的其他处理程序工作正常。 我在一个Linux上。 谢谢!

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

http包提供StripPrefix功能StripPrefix /css/前缀。

这应该做到这一点:

 http.Handle("/css/", http.StripPrefix("/css/", http.Fileserver(http.Dir("css")))) 

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

编辑:现在,我终于可以检查来源:这是我做了什么,对我有用:

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

./images/*.{gif,png,...}所有图像都可以正常使用。 关于脚本的同样的故事。