我正在嘗試執行兩台檔案伺服器,其中一台在ui
資料夾中提供 index.html
服務,另一台提供其他一些靜態文件,如下面的程式碼:
package main import ( "log" "net/http" ) func main() { srv := http.newservemux() // file server 1 uiserver := http.fileserver(http.dir("./ui")) srv.handle("/", uiserver) // file server 2 staticfilesserver := http.fileserver(http.dir("./files")) srv.handle("/files", staticfilesserver) if err := http.listenandserve(":8080", srv); err != nil { log.fatal(err) } }
兩個 fileserver 物件的定義方式完全相同,第一個 (uiserver) 運作正常,但第二個 (localhost:8080/files
上的 staticfilesserver) 給我 404。
我縮小了問題範圍並刪除了第一個(工作文件伺服器),就像下面的程式碼一樣:
package main import ( "log" "net/http" ) func main() { srv := http.newservemux() staticfilesserver := http.fileserver(http.dir("./files")) srv.handle("/files", staticfilesserver) if err := http.listenandserve(":8080", srv); err != nil { log.fatal(err) } }
但它仍然在路徑 localhost:8080/files
上給我 404
如果我將句柄路徑從/files
更改為/
,它會按預期工作,但這不是我想要的,我只是想知道是否可以在/
以外的路徑上提供服務以及如何我實現了這一點。
另外,我的資料夾結構:
|- main.go |- ui |--- index.html |- files |--- file1.txt |--- file2.csv |--- file3.img
我意識到http.dir()
和http.servemux.handle()
會有關係,它們實際上總結了它們的路徑,如下所示:
srv.Handle("/files/", http.FileServer(http.Dir("."))
上面的程式碼提供 ./files
資料夾中的所有內容,而不是 .
(如 dir(".")
中所寫)
它解決了我的問題。
以上是Go http.FileServer 出現意外的 404 錯誤的詳細內容。更多資訊請關注PHP中文網其他相關文章!