Heim >Backend-Entwicklung >Golang >Wie leite ich 404-Fehler auf Index.html in einem Go Static File Server um?
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.
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 }
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) } } }
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)) }
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!