我不明白为什么我的静态资源没有被提供。这是代码:
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上。谢谢!
答案 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,...}
中的所有图片都能正常投放。关于脚本的故事。