回答

收藏

显示带有标准 http 包的自定义 404 错误页面

技术问答 技术问答 370 人阅读 | 0 人回复 | 2023-09-12

假设我们有:
, O' V, M% Z, T' e8 j6 C4 N2 B3 G
    http.HandleFunc("/smth",smthPage)http.HandleFunc("/",homePage)1 |- }* D  N) L+ n
用户尝试错 URL 时,他们会看到一个简单的404 页面找不到。如何将案例返回到自定义页面?4 P' u* Q( x8 x7 c, M! ^3 p
更新大猩猩/多路复用器% s# g( r# K# e: F6 R* k% ?
用纯 net/http对于 包的人来说,答案是可以接受的。
# O$ R& j# v5 I# |( @1 m4 q* j' @若使用 gorilla/mux 你应该用这样的东西:
2 W' ~. s6 L9 b4 }9 ^  e6 C
    func main()      r := mux.NewRouter()    r.NotFoundHandler = http.HandlerFunc(notFound)}
    8 ^6 L' n8 [3 G# k6 r7 @# R
并func notFound(w http.ResponseWriter,r *http.Request)按需实施。
  }- c% A  h1 b) K                                                                ; F1 b$ j) H$ C  A5 L
    解决方案:                                                               
& S7 k6 e, I5 A/ W) e                                                                我通常这样做:- g9 R5 q1 ^1 h- ^# P
[code]package mainimport  "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")  code]在这里,我将代码简化为只显示自定义 404,但实际上我在这个设置中做了更多的工作:我用 处理所有 HTTP 错误errorHandler,记录有用信息,并向自己发送电子邮件。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则