Go FileServer配置异常:首个Handler正常,/d路径无法访问JSON文件
问题原因与解决方案
核心问题
你配置的第二个Handler无法匹配/d/user.json请求,根源在于Go标准库http.Handle的路径匹配规则:
- 当注册路径为
"/d"时,仅会匹配完全等于"/d"的请求,"/d/user.json"这类带后缀的请求会被第一个注册的"/"Handler捕获,自然找不到ui/data/user.json文件。 - 同时
StripPrefix的参数也需要对应调整,否则即使请求匹配成功,路径处理也会出错。
修正后的代码
func main() { // 原Handler保持不变,可正常访问/data.json http.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("ui/web")))) // 修改注册路径为"/d/",同步调整StripPrefix参数为"/d/" http.Handle("/d/", http.StripPrefix("/d/", http.FileServer(http.Dir("ui/data")))) log.Fatal(http.ListenAndServe("localhost:8080", nil)) }
原理说明
- 注册路径改为
"/d/"后,所有以"/d/"开头的请求(比如"/d/user.json")都会被该Handler接管。 StripPrefix("/d/")会移除请求路径中的"/d/"前缀,剩下的"/user.json"会直接映射到ui/data/user.json文件,逻辑和第一个正常工作的Handler完全一致。
内容的提问来源于stack exchange,提问作者Abdul Saqib
相关产品推荐
相关产品推荐

