Heim >Backend-Entwicklung >Golang >Wie kann ich 404-Fehlerantworten anpassen und Benutzer auf eine bestimmte Seite in einem statischen Go-Dateiserver umleiten?

Wie kann ich 404-Fehlerantworten anpassen und Benutzer auf eine bestimmte Seite in einem statischen Go-Dateiserver umleiten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-29 03:41:29660Durchsuche

How can I customize 404 error responses and redirect users to a specific page in a Go static file server?

Umgang mit 404-Fehlern in statischen Go-Dateiservern

Bei der Bereitstellung statischer Dateien über einen Go-Server führen nicht gefundene Dateianfragen normalerweise zu einem 404-Fehler Fehler gefunden. Um dieses Verhalten anzupassen und Benutzer auf eine bestimmte Seite wie index.html umzuleiten, kann ein benutzerdefinierter Handler implementiert werden.

Erstellen eines benutzerdefinierten Handlers

Der Standard-Dateiserver Der von der Go-Standardbibliothek bereitgestellte Handler unterstützt keine Fehleranpassung. Um einen benutzerdefinierten Handler zu implementieren, packen Sie ihn ein und überwachen Sie den Antwortstatuscode. Wenn ein 404-Fehler erkannt wird, ersetzen Sie die Antwort durch eine Weiterleitung.

Hier ist ein Beispiel für einen Antwortschreiber, der den Statuscode überprüft:

<code class="go">type NotFoundRedirectRespWr struct {
    http.ResponseWriter // Embedded http.ResponseWriter
    status              int
}

func (w *NotFoundRedirectRespWr) WriteHeader(status int) {
    w.status = status
    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 about successful writing
}</code>

Einschließen des Dateiserver-Handlers

Die Wrapped-Handler-Funktion ruft den ursprünglichen Handler auf und überprüft den Statuscode. Wenn es ein 404 ist, wird zu index.html weitergeleitet.

<code class="go">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)
        }
    }
}</code>

Verwenden des benutzerdefinierten Handlers

Registrieren Sie in der Hauptfunktion den umschlossenen Handler unter der Stamm-URL :

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

Protokollausgabe

Der Versuch, auf nicht vorhandene Dateien zuzugreifen, sollte die folgenden Protokolle generieren:

2017/11/14 14:10:21 Redirecting /a.txt3 to /index.html.
2017/11/14 14:10:21 Redirecting /favicon.ico to /index.html.

Hinweis : Alle nicht gefundenen Dateien, einschließlich favicon.ico, werden zu index.html umgeleitet. Wenn dies nicht gewünscht ist, können Sie nach Bedarf Ausnahmen hinzufügen.

Vollständiges Codebeispiel

Das vollständige Codebeispiel finden Sie auf dem Go Playground:

[https://go.dev/play/p/51SEMfTIM8s](https://go.dev/play/p/51SEMfTIM8s)

Das obige ist der detaillierte Inhalt vonWie kann ich 404-Fehlerantworten anpassen und Benutzer auf eine bestimmte Seite in einem statischen Go-Dateiserver umleiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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