Golang中国

使用http.FileServer(http.Dir(dir))可以很方便的宿主静态文件, 但是我看了下源代码, 这个底层的实现, 是默认是可以列出文件的目录的, 出于安全考虑, 我不希望用户能通过浏览器, 看到我的文件目录, 有什么好办法?

3 回复
fire988
#1 fire988 • 2016-08-10 20:40
func noDirListing(h http.Handler) http.HandlerFunc {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if strings.HasSuffix(r.URL.Path, "/") {
            http.NotFound(w, r)
            return
        }
        h.ServeHTTP(w, r)
    })
}

func main() {
    http.Handle("/", noDirListing(http.FileServer(http.Dir("./static/"))))
    err = http.ListenAndServe(":"+globalCfg.ListenPort, nil)
}
bigbear
#2 bigbear • 2016-08-11 11:53

这个我也试过, 如果只是判断URL的最后一个字符/, http://www.may.cn/web/area1 ,这样的结构, 仍然可以列出目录.

jimmykuu
#3 jimmykuu • 2016-08-11 16:59
touch index.html

放一个 index.html 文件在目录里面

需要 登录 后方可回复, 如果你还没有账号你可以 注册 一个帐号。