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

Golang net/http FileServer仅根路径可用,其他路径返回404求助

问题分析与解决方案

嗨,这个问题其实是Go的net/http包中FileServer的路径映射逻辑导致的,我来给你拆解清楚~

为什么你的代码会返回404?

当你用http.Handle("/pwd", http.FileServer(http.Dir(".")))时,FileServer会把请求的完整URL路径直接拼接到你传入的目录路径后面。比如你访问localhost:8080/pwd,它实际会去当前目录(.)下寻找名为pwd的文件或文件夹——如果你的当前目录里没有这个资源,自然就返回404了。

而当你把路径改成"/"时,请求的URL路径是/,FileServer就会直接访问当前目录的根内容,所以能正常显示。

正确的写法

要让/pwd前缀的请求映射到当前目录,你需要用http.StripPrefix来剥离掉URL中的/pwd/前缀,再把剩下的路径交给FileServer处理。修改后的代码如下:

func main() {
    // 注意路径末尾的斜杠,确保匹配所有/pwd/开头的请求
    http.Handle("/pwd/", http.StripPrefix("/pwd/", http.FileServer(http.Dir("."))))
    http.HandleFunc("/dog", dogpic)
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        panic(err)
    }
}

补充说明

  • 路径末尾的斜杠很重要:如果只写"/pwd",当用户访问/pwd/subfile时,StripPrefix无法匹配前缀"/pwd/",就会导致路径处理错误。加上斜杠后,所有以/pwd/开头的请求都会被正确处理。
  • 这样修改后,访问localhost:8080/pwd/就能看到当前目录的内容,访问localhost:8080/pwd/main.go也能直接查看对应的文件了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:27:54