You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:23:02