我想提供一个具有下一个形式的文件夹:

my-project/
  - public/ <- The folder that I want to serve and also all the subfolders and files
    - css/
      - styles.css

    - js/
      - script.js

  - main.go

我想使用URL的http://localhost/api/static/css/styles.csshttp://localhost/api/static/js/script.js访问它

所以我试图做下一步:

package main

import (
    "log"
    "net/http"

    "github.com/go-chi/chi/v5"
)

func main() {
    r := chi.NewRouter()

    r.Handle("/api/static/*", http.StripPrefix("/public/", http.FileServer(http.Dir("./public"))))

    if err := http.ListenAndServe(":80", r); err != nil {
        log.Fatal(err)
    }
}

这是不起作用的,当我尝试访问http://localhost/api/static/css/styles.csshttp://localhost/api/static/js/script.js时,它会给我一个HTTP 404错误代码

分析解答

您必须从路径上剥离/api/static,例如,如果提出/api/static/css/styles.css的请求,则将其剥离将留下css/styles.css,该请求将在./public下查找以提供./public/css/styles.css