显示带有标准 http 包的自定义 404 错误页面
技术问答
334 人阅读
|
0 人回复
|
2023-09-12
|
假设我们有:; O0 D& o6 L% W8 X) u4 O
http.HandleFunc("/smth",smthPage)http.HandleFunc("/",homePage)
. N7 D1 t4 H k, k& S 用户尝试错 URL 时,他们会看到一个简单的404 页面找不到。如何将案例返回到自定义页面?9 U" @; k6 U2 K6 |9 g6 Z- W- A
更新大猩猩/多路复用器
H% X2 s8 r% E用纯 net/http对于 包的人来说,答案是可以接受的。
$ Q5 k0 D& h1 v) n1 A7 ^( _6 B若使用 gorilla/mux 你应该用这样的东西:/ ]& J, ?" ]4 k% w
func main() r := mux.NewRouter() r.NotFoundHandler = http.HandlerFunc(notFound)}( W- |: h4 v* |8 \7 P% N& O4 M
并func notFound(w http.ResponseWriter,r *http.Request)按需实施。, {/ F0 C7 E3 m) R' o( u
: ~: P0 V0 r- w$ {* u. f% F% C
解决方案:
) m# U( Z, V* f/ B8 {9 R# U8 F 我通常这样做:
* r0 k! ^# y3 E. Y[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,记录有用信息,并向自己发送电子邮件。 |
|
|
|
|
|