ホームページ >バックエンド開発 >Golang >Go 静的ファイル サーバーの 404 エラー処理をカスタマイズするにはどうすればよいですか?

Go 静的ファイル サーバーの 404 エラー処理をカスタマイズするにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-28 02:09:31960ブラウズ

How Can I Customize the 404 Error Handling for a Go Static File Server?

Go 静的ファイル サーバーでのファイルが見つからない処理のカスタマイズ

http.FileServer() を使用して Go で静的ファイルを提供する場合、通常、見つからないファイルは404ステータスコードを返します。この動作をカスタマイズし、代わりに特定のページを提供するには、http.FileServer() ハンドラーをラップする必要があります。

カスタム HTTP ハンドラー ラッパーの作成

カスタム http.ResponseWriter ラッパー (NotFoundRedirectRespWr) を使用して、ファイル サーバー ハンドラーから返されるステータス コードをインターセプトします。ステータスが 404 の場合、応答の送信を防止し、指定されたページ (この場合は /index.html) にリクエストをリダイレクトします。

<code class="go">type NotFoundRedirectRespWr struct {
    http.ResponseWriter // We embed http.ResponseWriter
    status              int
}

func (w *NotFoundRedirectRespWr) WriteHeader(status int) {
    w.status = status // Store the status for our own use
    if status != http.StatusNotFound {
        w.ResponseWriter.WriteHeader(status)
    }
}

func (w *NotFoundRedirectRespWr) Write(p []byte) (int, error) {
    if w.status != http.StatusNotFound {
        return w.ResponseWriter.Write(p)
    }
    return len(p), nil // Lie that we successfully written it
}</code>

ファイル サーバー ハンドラーのラップ

次に、カスタムの WrapHandler 関数を使用して http.FileServer() ハンドラーをラップします。この関数は、カスタム応答ライターをハンドラー チェーンに追加します。応答ステータスが 404 の場合、/index.html にリダイレクトします。

<code class="go">func wrapHandler(h http.Handler) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        nfrw := &amp;NotFoundRedirectRespWr{ResponseWriter: w}
        h.ServeHTTP(nfrw, r)
        if nfrw.status == 404 {
            log.Printf("Redirecting %s to index.html.", r.RequestURI)
            http.Redirect(w, r, "/index.html", http.StatusFound)
        }
    }
}</code>

使用法

カスタム ハンドラーを使用するには、元の http.FileServer を置き換えます。 () ハンドラーとメイン関数内のラップされたハンドラー:

<code class="go">func main() {
    fs := wrapHandler(http.FileServer(http.Dir(".")))
    http.HandleFunc("/", fs)
    panic(http.ListenAndServe(":8080", nil))
}</code>

これで、見つからないファイルがあるとカスタム ハンドラーがトリガーされ、/index.html にリダイレクトされます。これにより、単一ページの Web アプリケーションでよりユーザー フレンドリーなエクスペリエンスが提供されます。

以上がGo 静的ファイル サーバーの 404 エラー処理をカスタマイズするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。