17

独自のハンドラーを使用して独自のデータを提供する HTTP サーバーを Go で開始しようとしていますが、同時にデフォルトの http FileServer を使用してファイルを提供したいと考えています。

FileServer のハンドラを URL サブディレクトリで動作させるのに問題があります。

このコードは機能していません:

package main

import (
        "fmt"
        "log"
        "net/http"
)

func main() {
        http.Handle("/files/", http.FileServer(http.Dir(".")))
        http.HandleFunc("/hello", myhandler)

        err := http.ListenAndServe(":1234", nil)
        if err != nil {
                log.Fatal("Error listening: ", err)
        }
}

func myhandler(w http.ResponseWriter, req *http.Request) {
        fmt.Fprintln(w, "Hello!")
}

localhost:1234/files/ でローカル ディレクトリを見つけることを期待していましたが、404 page not found.

ただし、ファイル サーバーのハンドラー アドレスを / に変更すると、次のように動作します。

        /* ... */
        http.Handle("/", http.FileServer(http.Dir(".")))

しかし今、私のファイルはアクセス可能で、ルート ディレクトリで見ることができます。

ルート以外の URL からファイルを提供するにはどうすればよいですか?

4

1 に答える 1

22

http.StripPrefixハンドラーを使用する必要があります。

http.Handle("/files/", http.StripPrefix("/files/", http.FileServer(http.Dir("."))))

ここを参照してください: http://golang.org/pkg/net/http/#example_FileServer_stripPrefix

于 2013-07-09T06:31:52.313 に答える