golang static stop index.html重定向

时间:2017-04-20 18:22:01

标签: go

package main

import (
  "log"
  "net/http"
)

func main() {
  fs := http.FileServer(http.Dir("."))
  http.Handle("/", fs)

  log.Println("Listening...")
  http.ListenAndServe(":3000", nil)
}

所以我有一个index.html文件,希望服务器停止显示它。

2 个答案:

答案 0 :(得分:1)

FileServer的文档指出:

  

作为一种特殊情况,返回的文件服务器会重定向任何请求   以“/index.html”结尾到同一路径,没有最终版   “index.html的”。

因此/index.html被重定向到//foo/bar/index.html被重定向到/foo/bar/

为避免此注册,请为特殊情况添加额外的处理程序。

http.HandleFunc("/index.html", func(w http.ResponseWriter, r *http.Request) {
    f, err := os.Open("index.html")
    if err != nil {
        // handle error
        return
    }
    http.ServeContent(w, r, "index.html", time.Now(), f)
})

请注意我使用的ServeContent ServeFile {{}}} ServeFile /index.html FileServer {{}}} {{}}}

答案 1 :(得分:1)

没有重定向,请求目录时要呈现的默认文件是index.html。目录列表是找不到此文件的后备内容,因此您无法在不删除index.html文件的情况下获取目录列表。

如果你想要一个目录列表,你必须自己写出来,然后你可以选择格式和样式。如果你想直接编写基本结构非常简单,可以使用内部dirList函数:

w.Header().Set("Content-Type", "text/html; charset=utf-8")
fmt.Fprintf(w, "<pre>\n")
for _, d := range dirs {
    name := d.Name()
    if d.IsDir() {
        name += "/"
    }
    url := url.URL{Path: name}
    fmt.Fprintf(w, "<a href=\"%s\">%s</a>\n", url.String(), htmlReplacer.Replace(name))
}
fmt.Fprintf(w, "</pre>\n")