


Wie kann ich 404-Fehlerantworten anpassen und Benutzer auf eine bestimmte Seite in einem statischen Go-Dateiserver umleiten?
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?
