从 HTTP 服务器中的文件中删除 .html 扩展名
许多 HTTP 服务器会自动在 URL 末尾添加“.html”扩展名,在某些情况下这可能是不可取的。要在 Go HTTP 服务器中修改此行为,您可以使用 http.Dir 实现自定义 http.FileSystem。具体方法如下:
<code class="go">type HTMLDir struct { d http.Dir }</code>
Open 方法决定如何打开文件。根据您的要求,您有多种选择:
始终附加“.html”扩展名:
<code class="go">func (d HTMLDir) Open(name string) (http.File, error) { return d.d.Open(name + ".html") }</code>
回退到“.html”扩展名:
<code class="go">func (d HTMLDir) Open(name string) (http.File, error) { // Try name as supplied f, err := d.d.Open(name) if os.IsNotExist(err) { // Not found, try with .html if f, err := d.d.Open(name + ".html"); err == nil { return f, nil } } return f, err }</code>
以“.html”扩展名和后备开始:
<code class="go">func (d HTMLDir) Open(name string) (http.File, error) { // Try name with added extension f, err := d.d.Open(name + ".html") if os.IsNotExist(err) { // Not found, try again with name as supplied. if f, err := d.d.Open(name); err == nil { return f, nil } } return f, err }</code>
<code class="go">fs := http.FileServer(HTMLDir{http.Dir("public/")}) http.Handle("/", http.StripPrefix("/", fs))</code>
通过实现 http.FileSystem 并自定义 Open 方法,您可以控制 HTTP 服务器如何提供文件,包括围绕“.html”扩展名的行为。
以上是如何从 Go HTTP 服务器中的 URL 中删除 .html 扩展名?的详细内容。更多信息请关注PHP中文网其他相关文章!