Entfernen Sie die .html-Erweiterung mithilfe eines benutzerdefinierten Dateisystems
Um die Anzeige der .html-Erweiterung in URLs zu vermeiden, besteht ein Ansatz darin, die zu implementieren http.FileSystem-Schnittstelle mit http.Dir. Diese Lösung nutzt den robusten Code in http.FileServer.
Um dies zu implementieren, erstellen Sie einen benutzerdefinierten Typ, der http.Dir einbettet:
<code class="go">type HTMLDir struct { d http.Dir }</code>
Ändern Sie die Hauptfunktion, um dieses benutzerdefinierte Dateisystem zu verwenden anstelle von http.FileServer:
<code class="go">func main() { fs := http.FileServer(HTMLDir{http.Dir("public/")}) http.Handle("/", http.StripPrefix("/", fs)) http.ListenAndServe(":8000", nil) }</code>
Als nächstes definieren Sie die Open-Methode für den HTMLDir-Typ. Diese Methode bestimmt, wie das Dateisystem Dateianfragen verarbeiten soll.
Immer die .html-Erweiterung anhängen:
<code class="go">func (d HTMLDir) Open(name string) (http.File, error) { return d.d.Open(name + ".html") }</code>
Fallback auf die .html-Erweiterung :
<code class="go">func (d HTMLDir) Open(name string) (http.File, error) { f, err := d.d.Open(name) if os.IsNotExist(err) { if f, err := d.d.Open(name + ".html"); err == nil { return f, nil } } return f, err }</code>
Fallback auf den Dateinamen (ohne Erweiterung):
<code class="go">func (d HTMLDir) Open(name string) (http.File, error) { f, err := d.d.Open(name + ".html") if os.IsNotExist(err) { if f, err := d.d.Open(name); err == nil { return f, nil } } return f, err }</code>
Durch die Implementierung der oben genannten Lösungen können Sie die . HTML-Erweiterung von URLs beim Zugriff auf Ihren Go-HTTP-Server.
Das obige ist der detaillierte Inhalt vonWie entferne ich die .html-Erweiterung von URLs in Ihrem Go-HTTP-Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!