假设我们有:
http.HandleFunc("/smth", smthPage) http.HandleFunc("/", homePage)
尝试输入错误的URL时,用户会看到一个普通的“找不到404页”。如何为这种情况返回自定义页面?
有关大猩猩/木糖的更新
对于使用纯net / http软件包的用户,可以接受答案。
如果您使用大猩猩/多路复用器,则应使用以下内容:
func main() { r := mux.NewRouter() r.NotFoundHandler = http.HandlerFunc(notFound) }
并func notFound(w http.ResponseWriter, r *http.Request)根据需要实施。
func notFound(w http.ResponseWriter, r *http.Request)
我通常这样做:
package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", homeHandler) http.HandleFunc("/smth/", smthHandler) http.ListenAndServe(":12345", nil) } func homeHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { errorHandler(w, r, http.StatusNotFound) return } fmt.Fprint(w, "welcome home") } func smthHandler(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/smth/" { errorHandler(w, r, http.StatusNotFound) return } fmt.Fprint(w, "welcome smth") } func errorHandler(w http.ResponseWriter, r *http.Request, status int) { w.WriteHeader(status) if status == http.StatusNotFound { fmt.Fprint(w, "custom 404") } }
在这里,我将代码简化为仅显示自定义404,但实际上使用此设置可以做更多的事情:我使用来处理所有HTTP错误errorHandler,在其中记录有用的信息并向自己发送电子邮件。
errorHandler