使用Go提供静态文件时遭遇404错误,求排查方案
解决Golang静态文件服务目录可访问但文件404的问题
这个问题的核心在于gorilla/mux路由的匹配规则:你当前使用的r.Handle("/static/", ...)只会严格匹配以/static/结尾的请求路径(也就是访问目录本身的时候),当你点击文件访问/static/main.css时,这个路径并不符合/static/的匹配规则,所以服务器找不到对应的handler,返回404。
修正方案
把原来的Handle方法换成PathPrefix,它会匹配所有以/static/开头的请求路径,这样无论是目录列表还是具体文件都能被正确处理:
func serv() { r := mux.NewRouter() r.HandleFunc("/", HomeHandler) // 用PathPrefix替代Handle,匹配所有以/static/开头的路径 r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("./static")))) srv := &http.Server{ Handler: r, Addr: "127.0.0.1:8666", WriteTimeout: 15 * time.Second, ReadTimeout: 15 * time.Second, } // 记得补充启动服务器的代码,比如: // log.Fatal(srv.ListenAndServe()) }
补充说明
http.StripPrefix("/static/", ...)的作用是把请求路径中的/static/前缀去掉,这样http.FileServer就能在./static目录下找到对应的文件(比如/static/main.css会被转换成main.css去目录里查找)。- 另外要确保程序运行时的工作目录是
projectdir/,不然http.Dir("./static")可能找不到目标目录,也会导致文件无法访问。
内容的提问来源于stack exchange,提问作者Steffen
相关产品推荐
相关产品推荐

