去http.Handle()不能按预期工作。找不到404档案

时间:2019-02-20 01:08:59

标签: html css go

因此,我尝试使CSS在我的Go服务器上工作,但是css文件未正确加载,我得到了404 file not found。当我直接从浏览器运行Index.html时,效果很好。

我的目录结构,其中#代表一个文件夹,-一个文件:

- Main.go
# static
    - index.html
    # css
       - Styles.css

Index.html包含:

<link rel="stylesheet" type="text/css" href="css/Styles.css"/>

这些是我所有的处理程序:

muxRouter := mux.NewRouter()
muxRouter.HandleFunc("/", basicHandler)
muxRouter.HandleFunc("/ws", wsHandler)
muxRouter.Handle("/css/", http.StripPrefix("/css/", http.FileServer(http.Dir("static/css"))))

basicHandler包含:

toSend := template.HTMLEscapeString(outputMessage)
toSend = strings.Replace(toSend, "\n", "<br>", -1)

templateError := allTemplates.ExecuteTemplate(responseWriter, "index.html", template.HTML(toSend))
if templateError != nil {
    log.Fatal("Template error: ", templateError)
}

wsHandler 处理我的程序使用的websocket。

1 个答案:

答案 0 :(得分:1)

我建议像这样移动文件(请注意,我将index.html重命名为小写-因此在访问文档根URL时默认会加载它):

Main.go
static/
static/index.html
static/css/Styles.css

修改index.html以引用更恰当命名的css目录:

<link rel="stylesheet" type="text/css" href="css/Styles.css"/>

编辑:更新以适应大猩猩/多路复用器。

对此answer的H / T。

package main

import (
        "github.com/gorilla/mux"
        "log"
        "net/http"
)

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

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

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

        // curl 'localhost:8080/css/Styles.css'
        // <style> ...  </style>
}