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

Mary-Kate Olsen
Freigeben: 2024-10-29 03:41:29
Original
578 Leute haben es durchsucht

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

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

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

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

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!

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
Neueste Artikel des Autors
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!