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

DDD
Lepaskan: 2024-10-28 05:29:30
asal
592 orang telah melayarinya

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
}
Salin selepas log masuk

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)
        }
    }
}
Salin selepas log masuk

Pengendali yang dibungkus kemudiannya didaftarkan untuk menyampaikan permintaan:

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

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!