net / http отображает корневой маршрут, даже когда я иду на маршрут, который не существует - PullRequest
0 голосов
/ 17 декабря 2018

У меня есть следующие маршруты:

  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 голосов
/ 17 декабря 2018

Из документов :

Обратите внимание, что, поскольку шаблон, заканчивающийся косой чертой, называет корневое поддерево, шаблон "/" соответствует всем путям, не сопоставленным с другими зарегистрированными шаблонами., а не только 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)
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...