首页 > 后端开发 > Golang > 如何从 Go HTTP 服务器中的 URL 中删除 .html 扩展名?

如何从 Go HTTP 服务器中的 URL 中删除 .html 扩展名?

Linda Hamilton
发布: 2024-10-28 08:34:29
原创
814 人浏览过

How to Remove the .html Extension from URLs in a Go HTTP Server?

从 HTTP 服务器中的文件中删除 .html 扩展名

许多 HTTP 服务器会自动在 URL 末尾添加“.html”扩展名,在某些情况下这可能是不可取的。要在 Go HTTP 服务器中修改此行为,您可以使用 http.Dir 实现自定义 http.FileSystem。具体方法如下:

  1. 创建自定义文件系统:
<code class="go">type HTMLDir struct {
    d http.Dir
}</code>
登录后复制
  1. 实现 Open 方法:

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>
登录后复制
  1. 使用您的自定义文件系统:
<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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板