ホームページ  >  記事  >  バックエンド開発  >  Go 静的ファイル サーバーで 404 エラーを Index.html にリダイレクトするにはどうすればよいですか?

Go 静的ファイル サーバーで 404 エラーを Index.html にリダイレクトするにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-28 05:29:30584ブラウズ

How to Redirect 404 Errors to Index.html in a Go Static File Server?

静的ファイル サーバーを使用するときにファイル欠落エラーを処理するにはどうすればよいですか?

FileServer メソッドを使用してローカル ディレクトリから静的ファイルを提供する場合、すべてのアセットがルート ルートが正しく提供されます。たとえば、index.html と style.css は、myserverurl/index.html と myserverurl/styles.css へのリクエストに対して問題なく提供されます。ただし、対応するファイルがないルートに対してリクエストが行われた場合は、404 エラーが返されます。

そのようなすべてのルートにindex.html を提供し、適切な画面をレンダリングするには、カスタム ハンドラーを使用できます。

ラッパーの作成

ラッパー ハンドラーは、FileServer ハンドラーに渡されるラッパー http.ResponseWriter を作成します。このラッパー応答ライターはステータス コードを検査します。ステータス コードが 404 であることが判明した場合、クライアントに応答は送信されません。代わりに、/index.html へのリダイレクトが送信されます。

ラッパー http.ResponseWriter がどのように見えるかの例を次に示します。

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
}

FileServer ハンドラーは、このラッパーを使用してラップされます。 :

func wrapHandler(h http.Handler) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        nfrw := &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)
        }
    }
}

ラップされたハンドラーはリクエストを処理するために登録されます:

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

/a.txt3 や favicon.ico などの存在しないファイルをクエリしようとすると、次のような結果になります。 404 エラーとリクエストは /index.html.

にリダイレクトされます。

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

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