使用Gorilla mux提供静态html

时间:2017-10-30 07:04:57

标签: html go gorilla

我使用gorilla serve mux来提供静态html文件。

r := mux.NewRouter()
r.PathPrefix("/").Handler(http.FileServer(http.Dir("./public"))).Methods("GET")

我在公共文件夹中有一个Index.html文件以及其他html文件。

浏览网站时,我会获得该文件夹的所有内容,而不是默认的Index.html。

我来自C#,我知道IIS默认使用Index.html,但可以选择任何页面作为默认页面。

我想知道在没有创建自定义处理程序/包装器的情况下是否有正确的方法来选择在Gorilla mux中提供的默认页面。

3 个答案:

答案 0 :(得分:0)

使用自定义http.HandlerFunc会更容易:

http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
    // Here you can check if path is empty, you can render index.html
    http.ServeFile(w, r, r.URL.Path)
})

答案 1 :(得分:0)

您必须创建自定义处理程序,因为您需要自定义行为。在这里,我只是包装了http.FileServer处理程序。

试试这个:

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/mux"
)

func main() {

    handler := mux.NewRouter()

    fs := http.FileServer(http.Dir("./public"))
    handler.PathPrefix("/").Handler(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if r.URL.Path == "/" {
            //your default page
            r.URL.Path = "/my_default_page.html"
        }

        fs.ServeHTTP(w, r)
    })).Methods("GET")

    log.Fatal(http.ListenAndServe(":8080", handler))
}

因此,从代码中,如果访问路径是根(/),那么您将r.URL.Path重写为默认页面,在本例中为my_default_page.html

答案 2 :(得分:0)

抓住鱼提到它之后我决定检查大猩猩服务mux的实际代码。 此代码取自Gorilla mux所基于的net / http包。

func serveFile(w ResponseWriter, r *Request, fs FileSystem, name string, 
redirect bool) {
const indexPage = "/index.html"

// redirect .../index.html to .../
// can't use Redirect() because that would make the path absolute,
// which would be a problem running under StripPrefix
if strings.HasSuffix(r.URL.Path, indexPage) {
    localRedirect(w, r, "./")
    return
}

代码请求索引文件为小写的index.html,因此重命名我的索引文件解决了它。 谢谢你抓住了鱼!