一尘不染

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

go

假设我们有:

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)根据需要实施。


阅读 268

收藏
2020-07-02

共1个答案

一尘不染

我通常这样做:

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,在其中记录有用的信息并向自己发送电子邮件。

2020-07-02