我试图在Go中启动一个HTTP服务器,该服务器将使用自己的处理程序来提供自己的数据,但与此同时,我想使用默认的http FileServer来提供文件。
我在使FileServer的处理程序在URL子目录中工作时遇到问题。
该代码不起作用:
package main import ( "fmt" "log" "net/http" ) func main() { http.Handle("/files/", http.FileServer(http.Dir("."))) http.HandleFunc("/hello", myhandler) err := http.ListenAndServe(":1234", nil) if err != nil { log.Fatal("Error listening: ", err) } } func myhandler(w http.ResponseWriter, req *http.Request) { fmt.Fprintln(w, "Hello!") }
我期望在localhost:1234 / files /中找到本地目录,但是它返回一个404 page not found。
404 page not found
但是,如果我将文件服务器的处理程序地址更改为/,它将起作用:
/* ... */ http.Handle("/", http.FileServer(http.Dir(".")))
但是现在我的文件可以访问了,并且在根目录中可见。
如何使它可以从不同于root的URL提供文件?
您需要使用http.StripPrefix处理程序:
http.StripPrefix
http.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("."))))
看到这里:http : //golang.org/pkg/net/http/#example_FileServer_stripPrefix