Hugo で生成された (半) 静的な Web サイトを提供するために Google App Engine を使用しています。すべてのHTMLファイルが保存され、提供されるディレクトリ「public」があります。たとえば、連絡先フォームを処理するためのサーバー側スクリプトもいくつかあります。ファイルは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 ページも提供するという意味では機能しますが、サーバーの応答コードを処理する方法がまだわかりません。
どんな助けでも大歓迎です。ありがとう!