7

静的リソースが提供されない理由がわかりません。コードは次のとおりです。

func main() {
    http.HandleFunc("/", get_shows)
    http.HandleFunc("/get",  get_show_json)
    http.HandleFunc("/set", set_shows)
    http.Handle("/css/", http.FileServer(http.Dir("./css")))
    http.Handle("/js/", http.FileServer(http.Dir("./js")))
    http.ListenAndServe(":8080", nil)
}

http://myhost.fake/css/またはhttp://myhost.fake/css/main.css (これらはファイルシステムに存在します)に移動してプログラムを実行すると、404 エラーが発生します。「./css」をディレクトリへのフルパスに置き換えても同じです。js 静的ディレクトリについても同様です。私の他のハンドラーは正常に動作します。私はLinuxを使用しています。ありがとう!

4

2 に答える 2

13

ハンドラー パス ( /css/) は、FileServer ハンドラーに加えて、プレフィックスの後のファイルに渡されます。つまり、http://myhost.fake/css/test.cssにアクセスすると、FileServer がファイルを見つけようとしています./css/css/test.css

http パッケージは、プレフィックスを削除する機能StripPrefixを提供します。/css/

これはそれを行う必要があります:

http.Handle("/css/", http.StripPrefix("/css/", http.FileServer(http.Dir("css"))))
于 2013-03-19T19:24:47.783 に答える
0

今は確認できませんが、IIRC: s/"./css"/"css"/; s/"./js"/"js"/.

編集:ようやくソースを確認できるようになりました:これは私がやったことであり、私にとってうまくいくものです:

http.Handle("/scripts/", http.FileServer(http.Dir("")))
http.Handle("/images/", http.FileServer(http.Dir("")))

のすべての画像が./images/*.{gif,png,...}適切に提供されます。スクリプトについての同じ話。

于 2013-03-19T19:12:16.267 に答える