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

2023-11-22

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

My code:

package main

import (
    "net/http"
)

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

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

一种选择是实施http.文件系统 using 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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • .htaccess 路由到服务器上的子目录?性能/加载时间

    我想知道是否可以使用 htaccess 文件将我的域直接路由到服务器上的子目录 我从常规虚拟主机提供商处购买了虚拟主机软件包 其中我的domain com 连接到我的服务器的根目录 我想知道是否可以以某种方式将 htaccess 文件上传到
  • Golang Appengine 项目无法构建

    我有一个使用 golang 的应用程序引擎项目 我已经大约一年没有碰过了 我现在无法让它在之前构建的机器上构建 我收到以下错误 go app builder 解析输入失败 解析器 src golang org x net internal
  • Go SQL查询不一致

    我在执行查询时遇到一些非常奇怪的不一致 并且想知道是否有人知道原因 想象一下我有一个定义如下的结构 type Result struct Afield string db A Bfield interface db B Cfield str
  • GET 和 POST 方法的单独 Flask 路由

    在 Flask 中定义路由时 最好的做法是使用由多个 HTTP 方法定义的单个路由 并在该单个路由中使用显式逻辑处理不同的 HTTP 方法 例如 app route api users methods GET POST def users
  • Node.js Socket.IO 无法完全工作

    我运行一个侦听端口 5000 的独立服务器 当我通过 Netcat 或 Telnet 连接到它时 该应用程序不会在终端上打印任何内容 但在 Netcat Telnet 应用程序屏幕上 它显示连接已建立 var io require sock
  • 是否有管理 __utma、__utmz 等 cookie 的标准?

    无论我登录 Facebook 还是 Twitter 我都会受到以下名称的 cookie 轰炸 utma utmb utmc utmv 它们的功能是什么 是否有一个标准来管理这些在服务器端的使用方式 这些 cookie 通常与谷歌分析 htt
  • 共享来自单独命令/进程的属性

    我提供带有多个命令和子命令的命令行工具 我使用cobra https github com spf13 cobra命令行 我有两个单独的命令首先是前提条件e 给其他人 例如第一个命令是通过创建临时文件夹并验证某些文件来首选环境 第二个命令应
  • HTTP 和 HTTPS iframe

    我正在创建一个小部件 我想允许其他人使用它 这iframe通过 HTTP 加载 但我想允许用户通过 HTTPS 登录 即通过 SSL 发送登录请求 同源策略中允许这样做吗 即 场景是用户可以将我的 JavaScript 集成到他们的网站 小
  • 投射回更专业的界面

    我正在用 Go 编写一个游戏 在 C 中 我将所有实体类存储在 BaseEntity 类的数组中 如果一个实体需要在世界中移动 那么它将是一个从 BaseEntity 派生的 PhysEntity 但添加了方法 我尝试模仿这是 go pac
  • nsq 无法通过连接到 nsqlookupd 来消费消息

    我尝试使用 docker compose 来运行 nsq docker compose yml如下 version 3 services nsqlookupd image nsqio nsq command nsqlookupd ports
  • 如何在golang模板上打印JSON?

    我需要在客户端有一个对象 所以我使用 json marshal 将其转换为 JSON 并将其打印到模板中 该对象被打印为转义 JSON 字符串 我期待它是var arr o1 o2 但它是var arr o1 o2 我知道我可以在客户端进行
  • 在 IntelliJ IDEA 中运行。多个文件和错误未定义:数据

    我想使用 IntelliJ IDE 社区版编写代码GO Go语言 我安装了正确的插件 并安装了构建应用程序所需的所有工具 我的应用程序包含以下两个文件 每个都在目录中 事件服务器 Main go Data go 如果我想使用 Run Ctl
  • 詹金斯上的登录类型选择有什么区别?

    我之前已经在一些机器上通过 war 文件和作为 Windows 服务安装的网页安装了 jenkins 现在我尝试通过 msi 文件将其安装在另一台计算机上 但我遇到了一个问题 在安装步骤中 有一个步骤询问我 登录类型 这给了我 2 个选择
  • Angular JS 在调用新的 $http 之前取消 $http 调用

    在 Angular JS 1 1 5 中 您可以取消之前启动的 http 调用 这两个link1 https stackoverflow com questions 16962232 in angularjs how to stop ong
  • 如何在C#中执行Go函数

    有没有办法从 C 执行 Go 函数 例如 对于 Python 我会使用 Ironpython 我知道我可以生成一个进程来执行 Go 脚本 但如果可能的话 我真的不想回退到这样的解决方案 Google 搜索没有显示任何内容 那么有什么方法可以
  • Gorm 总是返回带有 nil 值的结构

    我正在使用 Gorm 构建 Go Web API 作为 Amazon RDS 中 Postgresql 数据库的 ORM 问题是 Gorm 总是返回一片结构 其值全部为零 尽管数据库已经填充了数据 切片中的结构体数量是否合适取决于LIMIT
  • 如何关闭python服务器

    使用此代码来运行 python 服务器 import os from http server import SimpleHTTPRequestHandler HTTPServer os chdir c users owner desktop
  • Golang中如何删除字符串的最后一个字符?

    我想删除字符串的最后一个字符 但在此之前我想检查最后一个字符是否是 如何才能做到这一点 以下是删除尾随加号的几种方法 package main import fmt strings func TrimSuffix s suffix stri
  • 返回重定向作为对 Ajax(fetch、XHR 等)请求的响应

    如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果浏览器收到对 ajax 请求的重定向响应 会发生什么 如果服务器发送重定向 又名 302 响应加上 Location 标头 浏览器将自动遵循重定向 对此的回应second请求 假
  • 为什么 Go 中只有 int 而没有 float?

    在 Go 中 有这样的类型int这可能相当于int32 or int64取决于系统架构 我可以声明一个整数变量而不用担心它的大小 var x int 为什么没有这个类型float 这相当于float32 or float64取决于我的系统架

随机推荐

  • 启用 CORS 的服务器不拒绝请求

    我正在尝试使用快递Cors使用我的 resitfy 服务器 它似乎并没有拒绝来自其他 ip 的请求 我在本地工作 所以我尝试将 origin 设置为随机公共 IP 但我的所有请求仍在处理中 这是我的路线 module exports fun
  • Hibernate:删除多对多关联

    我有两个具有多对多关联的表 数据库片段 loads Id Name sessions Id Date 会话负载 LoadId会话ID Hibernate 映射片段 loads hbm xml
  • 跨数据库外键错误

    这是我的第一个数据库 DB1 的模型 from django db import models class Company models Model name models CharField max length 100 null Tru
  • 初始化 Objective-C 类别中的静态变量

    我试图创建一个静态变量来存储图像字典 不幸的是 我能找到的初始化它的最好方法是检查使用该变量的每个函数 由于我是在类别内创建此变量 因此我不能仅在初始化程序内初始化它 有没有更简洁的方法来初始化 navigationBarImages st
  • Typescript:对象和基元之间的 keyof typeof union 始终是 never

    首先 我的问题的一些背景信息 我有一个项目 在其中我通过 Socket IO 接收一个对象 因此我没有关于它的类型信息 此外 它是一种相当复杂的类型 因此需要进行大量检查以确保接收到的数据良好 问题是我需要访问由接收到的对象中的字符串指定的
  • 不(最大宽度:512px)不工作

    我有以下 HTML 页面 Foobar 但是 这对窗口没有响应width 媒体规则从未适用 如果我删除not 它按预期工作 我不明白什么not max width 是的 我知道还有其他方法可以完成同样的事情 并且not max width
  • 角度单元测试失败,但不是本地测试

    升级到 Angular 版本 11 后 Travis CI 上的单元测试现在失败 在本地 它们确实成功了 即使在使用相同的节点 nvm 和 npm 版本进行全新安装之后 所有单元测试的错误都是相同的 Failed fn bind is no
  • Java Regex 从 HTML 锚点 (...) 标记获取文本

    我正在尝试获取某个标签内的文本 所以如果我有 a href http something com Found a a 我希望能够检索Found text 我正在尝试使用正则表达式来做到这一点 我能够做到 如果 a href a a gt 我
  • 显示 w.r.t. 的语义转义字符

    考虑以下示例 gt ghci 外壳 gt writeFile d show d cat d d gt writeFile d d cat d d gt writeFile backslash show cat backslash gt wr
  • Python - 不支持的类型:范围和范围

    我在尝试运行脚本时遇到这个奇怪的错误 代码似乎是正确的 但似乎 python 3 不喜欢这部分 def function x if integer return int x else return x non nil randrange 2
  • 避免内存泄漏/使用 Javascript

    我是 jQuery 的新手 我有点困惑这是否正常或可能导致内存泄漏 代码如下 在某些日期过滤器上为每个新值调用此方法 function preapreTooltip chart var tickLength chart xAxis 0 ti
  • linux uinput:简单的例子?

    我在获取时遇到一些问题both代码的两侧使用uinput在职的 Based on Getting started with uinput the user level input subsystem dead link archived I
  • 如何将PictureBox.Image保存到文件?

    我使用以下命令将 jpgImage 写入 PictureBox Image var jpgImage new Byte jpgImageSize pictureBox Image new Bitmap new MemoryStream jp
  • 如何使用 Spring 通过 OAuth2 保护 MVC 应用程序?

    对不起 我的英语 我有一个可以以通常方式登录的应用程序 Configuration EnableWebSecurity public class LoginSecurityConfig extends WebSecurityConfigur
  • 无法编译android studio项目

    我想在我的项目中添加一个materialdrawer库 当我添加依赖项时 我的 build gradle 看起来像这样 dependencies compile fileTree dir libs include jar compile c
  • Dockerized Rails 5 RC1 应用程序未获取正在开发的控制器和模型的更新

    我在 Mac OS X Docker Machine Docker Compose 上开发 Rails 4 应用程序有相当多的经验 但是 Rails 5 在开发环境中缓存文件的方式发生了一些变化 目前正在使用 RC1 进行测试 启动应用程序
  • 围绕零值自动构建色彩图

    我经常想绘制一张范围从负数到正数的差异图像 问题在于 matlab 的颜色图仅从最小值到最大值缩放 但不关心某些中间值 本例为零 例如 我制作了peaks具有单个像素不同的图像 原来的样子是这样的 所以零值在顶部图像是蓝色的 在底部是绿色的
  • 当 help() 列出方法签名时,斜杠意味着什么?

    什么是 Python 3 4 中的意思help输出为range右括号之前 gt gt gt help range Help on class range in module builtins class range object range
  • 三角形连接区域

    考虑以下形状 灰色区域是外部容器 忽略这一点 白色区域是一个链接 a tag 红色三角形区域是另一个链接 a tag 我使用以下代码为红色区域创建了一个 CSS 三角形 ribbon position absolute right 0 bo
  • 从简单 HTTP 服务器中的每个文件中删除 .html 扩展名

    我想做到这一点 以便当有人访问我的 Go HTTP 服务器上的页面时 他们不会看到 html扩大 例如 当他们访问时https example org test他们会看到的内容https example org test html My c