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
相关产品推荐
相关产品推荐

