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

Go语言go:embed结合HTTP Server部署非根路径资源遇404问题

问题解决:将静态文件挂载到/admin/路径后404的处理

当你把挂载路径改为/admin/时,直接使用mux.Handle("/admin/", http.FileServer(http.FS(sub)))会导致FileServer尝试在嵌入的文件系统中查找admin/开头的路径(比如访问/admin/时,会找admin/index.html),但你的文件系统里只有index.html,没有admin目录,所以返回404。

解决方法是使用http.StripPrefix去掉请求路径中的/admin/前缀,再将处理后的路径传给FileServer,这样FileServer就能正确找到对应的静态文件。

修改后的main.go代码如下:

package main

import (
    "embed"
    "io/fs"
    "net/http"
)

//go:embed web/dist
var webfs embed.FS

func main() {
    mux := http.NewServeMux()
    sub, err := fs.Sub(webfs, "web/dist")
    if err != nil {
        panic(err)
    }
    // 使用StripPrefix去掉/admin/前缀,再交给FileServer处理
    mux.Handle("/admin/", http.StripPrefix("/admin/", http.FileServer(http.FS(sub))))

    http.ListenAndServe(":2222", mux)
}

关键说明

  • http.StripPrefix("/admin/", ...)会将请求路径中的/admin/部分移除,比如访问/admin/时,实际传给FileServer的路径是/,对应文件系统里的index.html;如果有其他静态文件比如/admin/css/style.css,会被处理为/css/style.css,去文件系统中查找对应文件。
  • 注意挂载路径/admin/的末尾斜杠不能省略,否则当访问/admin(不带斜杠)时会出现重定向问题,而带斜杠的路径能正确匹配所有以/admin/开头的请求。

内容的提问来源于stack exchange,提问作者user1663023

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 05:03:27