我有这些路线:
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
renderAndExecuteTemplate(w, r, "page/index.tmpl", nil)
})
http.HandleFunc("/route1", func(w http.ResponseWriter, r *http.Request) {
renderAndExecuteTemplate(w, r, "page/route1.tmpl", nil)
})
http.HandleFunc("/route2", func(w http.ResponseWriter, r *http.Request) {
renderAndExecuteTemplate(w, r, "page/route2.tmpl", nil)
})
有效。
但是,当我转到一条不存在的路由时:“ localhost / fdsafdsafdsfds”,它仍然呈现“索引”页面。
为什么?如何防止这种情况发生?
答案 0 :(得分:3)
来自docs:
请注意,由于以斜杠结尾的模式会命名有根的子树, 模式“ /”匹配所有其他注册未匹配的路径 模式,而不仅仅是具有Path ==“ /”的URL。
防止这种情况的一种方法是构建一个处理请求的处理程序:
http.HandleFunc("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
if r.URL.Path != "/" {
w.WriteHeader(http.StatusNotFound)
return
}
renderAndExecuteTemplate(w, r, "page/index.tmpl", nil)
})