使用Go提供静态文件会产生404错误

时间:2018-05-21 11:09:52

标签: go

任务:

我尝试使用Golang提供静态文件。

问题:

显示目录内容,但找不到目录中的文件。

项目结构:

projectdir/

  |- main.go
  |- static/
    |- main.css
  |- templates
    |- index.tmpl 

来源摘录:

main.go

func serv() {
    r := mux.NewRouter()

    r.HandleFunc("/", HomeHandler)
    r.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./static"))))

srv := &http.Server{
    Handler:      r,
    Addr:         "127.0.0.1:8666",
    WriteTimeout: 15 * time.Second,
    ReadTimeout:  15 * time.Second,
}

问题描述

如果我启动程序并将浏览器指向127.0.0.1:8666/static/,则列出目录 ./ static 的内容,即 main.css

如果我单击文件 main.css ,则服务器响应为404。

问题

我想念什么?

提前致谢!

1 个答案:

答案 0 :(得分:2)

Gorilla路由器与Go的不同之处在于,Gorilla只会匹配给定的确切URL,而不仅仅是URL前缀。 Gorilla documentation中对此进行了详细说明,其中介绍了PathPrefix如何用于提供文件:

r.PathPrefix("/static/").
    Handler(http.StripPrefix("/static/", http.FileServer(http.Dir("./static"))))