Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengalihkan Ralat 404 ke Index.html dalam Pelayan Fail Go Statik?

Bagaimana untuk Mengalihkan Ralat 404 ke Index.html dalam Pelayan Fail Go Statik?

DDD
DDDasal
2024-10-28 05:29:30584semak imbas

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

Bagaimana untuk mengendalikan ralat fail yang hilang apabila menggunakan pelayan fail statik?

Apabila menggunakan kaedah FileServer untuk menyampaikan fail statik daripada direktori tempatan, semua aset dihidupkan laluan akar dilayan dengan betul. Contohnya, index.html dan style.css dihidangkan tanpa sebarang isu untuk permintaan ke myserverurl/index.html dan myserverurl/styles.css. Walau bagaimanapun, jika permintaan dibuat ke laluan yang tiada fail yang sepadan, ralat 404 dikembalikan.

Untuk menyampaikan index.html bagi semua laluan tersebut dan memaparkan skrin yang sesuai, pengendali tersuai boleh dicipta yang membalut pengendali FileServer.

Membuat pembalut

Pengendali pembalut mencipta http.ResponseWriter pembalut yang dihantar kepada pengendali FileServer. Penulis respons pembungkus ini memeriksa kod status. Jika ia mendapati bahawa kod status ialah 404, ia tidak menghantar respons kepada pelanggan. Sebaliknya, ia menghantar ubah hala ke /index.html.

Berikut ialah contoh cara pembungkus http.ResponseWriter mungkin kelihatan seperti:

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
}

Pengendali FileServer dibalut menggunakan pembungkus ini :

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)
        }
    }
}

Pengendali yang dibungkus kemudiannya didaftarkan untuk menyampaikan permintaan:

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

Percubaan untuk menanyakan fail yang tidak wujud seperti /a.txt3 atau favicon.ico, akan mengakibatkan ralat 404 dan permintaan dialihkan ke /index.html.

Atas ialah kandungan terperinci Bagaimana untuk Mengalihkan Ralat 404 ke Index.html dalam Pelayan Fail Go Statik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn