gpt4 book ai didi

http - 从简单的 HTTP 服务器中的每个文件中删除 .html 扩展名

转载 作者:IT王子 更新时间:2023-10-29 01:25:36 25 4
gpt4 key购买 nike

我想这样做,当有人访问我的 Go HTTP 服务器上的页面时,他们不会看到 .html 扩展名。例如。当他们访问 https://example.org/test 时,他们将看到 https://example.org/test.html 的内容。

我的代码:

package main

import (
"net/http"
)

func main() {
fs := http.FileServer(http.Dir("public/"))

http.Handle("/", http.StripPrefix("/", fs))
http.ListenAndServe(":8000", nil)
}

最佳答案

一个选择是实现http.FileSystem使用 http.Dir .这种方法的优点是它利用了 http.FileServer 中精心编写的代码。

它看起来像这样:

type HTMLDir struct {
d http.Dir
}

func main() {
fs := http.FileServer(HTMLDir{http.Dir("public/")})
http.Handle("/", http.StripPrefix("/", fs))
http.ListenAndServe(":8000", nil)
}

执行Open方法取决于应用要求。

如果您总是想添加 .html 扩展名,请使用此代码:

func (d HTMLDir) Open(name string) (http.File, error) {
return d.d.Open(name + ".html")
}

如果您想回退到 .html 扩展名,请使用此代码:

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
}

翻转前一个,以 .html 扩展名开始,然后回退到提供的名称:

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
}

关于http - 从简单的 HTTP 服务器中的每个文件中删除 .html 扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57281010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com