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文件,希望服务器停止显示它。
答案 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")