Golang Gorilla Mux与http.FileServer返回404
我看到的问题是我正在尝试http.FileServer
将Gorilla mux Router.Handle函数与一起使用。
这不起作用(图像返回404)。
myRouter := mux.NewRouter()myRouter.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.Dir(HomeFolder + "images/"))))
这有效(图像显示正常)。
http.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.Dir(HomeFolder + "images/"))))
下面简单的转到Web服务器程序,显示问题…
package mainimport (
"fmt"
"net/http"
"io"
"log"
"github.com/gorilla/mux"
)
const (
HomeFolder = "/root/test/"
)
func HomeHandler(w http.ResponseWriter, req *http.Request) {
io.WriteString(w, htmlContents)
}
func main() {
myRouter := mux.NewRouter()
myRouter.HandleFunc("/", HomeHandler)
//
// The next line, the image route handler results in
// the test.png image returning a 404.
// myRouter.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.Dir(HomeFolder + "images/"))))
//
myRouter.Host("mydomain.com")
http.Handle("/", myRouter)
// This method of setting the image route handler works fine.
// test.png is shown ok.
http.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.Dir(HomeFolder + "images/"))))
// HTTP - port 80
err := http.ListenAndServe(":80", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
fmt.Printf("ListenAndServe:%s\n", err.Error())
}
}
const htmlContents = `<!DOCTYPE HTML>
<html lang="en">
<head>
<title>Test page</title>
<meta charset = "UTF-8" />
</head>
<body>
<p align="center">
<img src="/images/test.png" height="640" width="480">
</p>
</body>
</html>
`
回答:
我将其发布在golang-nuts讨论组上,并 从
ToniCárdenas获得了此解决方案 …
标准的net / http ServeMux(这是您在使用时使用的标准处理程序http.Handle
)和多路复用器路由器具有不同的地址匹配方式。
查看http://golang.org/pkg/net/http/#ServeMux和http://godoc.org/github.com/gorilla/mux之间的区别。
因此,基本上,http.Handle('/images/', ...)
匹配“ / images /
whatever”,而myRouter.Handle('/images/', ...)
仅 匹配“ / images /”,如果要处理“ /
images / whatever”,则必须…
在路由器中使用正则表达式匹配
myRouter.Handle("/images/{rest}", http.StripPrefix("/images/", http.FileServer(http.Dir(HomeFolder + "images/"))))
在路由器上使用PathPrefix方法:
myRouter.PathPrefix("/images/").Handler(http.StripPrefix("/images/", http.FileServer(http.Dir(HomeFolder + "images/"))))
以上是 Golang Gorilla Mux与http.FileServer返回404 的全部内容, 来源链接: utcz.com/qa/415401.html