Wie leite ich 404-Fehler auf Index.html in einem Go Static File Server um?

DDD
Freigeben: 2024-10-28 05:29:30
Original
592 Leute haben es durchsucht

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

Wie gehe ich mit einem Fehler wegen fehlender Dateien um, wenn ich einen statischen Dateiserver verwende?

Bei Verwendung der FileServer-Methode zum Bereitstellen statischer Dateien aus einem lokalen Verzeichnis werden alle Assets aktiviert Die Root-Route wird korrekt bedient. Beispielsweise werden index.html und style.css ohne Probleme für Anfragen an myserverurl/index.html und myserverurl/styles.css bereitgestellt. Wenn jedoch eine Anfrage an eine Route gestellt wird, für die es keine entsprechende Datei gibt, wird ein 404-Fehler zurückgegeben.

Um index.html für alle derartigen Routen bereitzustellen und den entsprechenden Bildschirm darzustellen, kann ein benutzerdefinierter Handler verwendet werden erstellt, der den FileServer-Handler umhüllt.

Erstellen des Wrappers

Der Wrapper-Handler erstellt einen Wrapper http.ResponseWriter, der an den FileServer-Handler übergeben wird. Dieser Wrapper-Antwortschreiber prüft den Statuscode. Wenn festgestellt wird, dass der Statuscode 404 ist, wird die Antwort nicht an den Client gesendet. Stattdessen wird eine Weiterleitung an /index.html gesendet.

Hier ist ein Beispiel dafür, wie der Wrapper http.ResponseWriter aussehen könnte:

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
}
Nach dem Login kopieren

Der FileServer-Handler wird mit diesem Wrapper umschlossen :

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)
        }
    }
}
Nach dem Login kopieren

Der umhüllte Handler wird dann für die Bearbeitung von Anfragen registriert:

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

Der Versuch, eine nicht vorhandene Datei wie /a.txt3 oder favicon.ico abzufragen, führt zu ein 404-Fehler und die Anfrage wird an /index.html umgeleitet.

Das obige ist der detaillierte Inhalt vonWie leite ich 404-Fehler auf Index.html in einem Go Static File Server um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!