我正在使用 Google App Engine 来服务我用 Hugo 生成的(半)静态网站。我有一个“公共”目录,所有的 HTML 文件都在其中存储并提供。例如,我还有一些用于处理联系表单的服务器端脚本。该app.yaml
文件看起来像这样。
// app.yaml
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
secure: always
简化的main.go
文件看起来像这样
// main.go
package main
import (
"net/http"
"encoding/json"
"appengine"
"appengine/urlfetch"
)
func init() {
fileHandler := http.FileServer(http.Dir("public"))
http.Handle("/", fileHandler)
http.HandleFunc("/contactus/", HandleContactus)
}
这工作得很好,并为 html 文件提供服务。但是,我正在寻找一种解决方案来处理找不到页面并且响应404 Not Found
为例如(或任何其他服务器错误)的情况。
我的想法是创建一个自定义处理程序,它可以传入http.Handle("/", myCustomHandler)
并处理服务器响应,并404.html
在必要时重定向到自定义等。我是 Go 新手,似乎无法弄清楚应该如何实现。我也看过 Gorilla Mux,但希望(如果可能的话)不使用外部库来保持简单。
基于这篇文章,我尝试了以下
package main
import (
"net/http"
"encoding/json"
"appengine"
"appengine/urlfetch"
)
func StaticSiteHandler(h http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){
h.ServeHTTP(w, r)
})
}
func init() {
fileHandler := http.FileServer(http.Dir("public"))
http.Handle("/", StaticSiteHandler(fileHandler))
http.HandleFunc("/contactus/", HandleContactus)
}
这个解决方案的工作原理是它也为我的 HTML 页面提供服务,但是我仍然不知道如何处理服务器响应代码。
任何帮助将不胜感激。谢谢!