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 main

import (

"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

回到顶部