即使我转到不存在的路由,net / http也会渲染根路由

时间:2018-12-17 20:46:34

标签: go

我有这些路线:

  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”,它仍然呈现“索引”页面。

为什么?如何防止这种情况发生?

1 个答案:

答案 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)
})