因此,無論何時我嘗試訪問我的靜態子目錄中的任何文件,我只會得到一個404,Not Found,Accessing Home /另一方面工作得很好,但是我打電話給我的圖片從主文件簡直是壞:(,所以我想知道要改變什麼,這樣我可以提供文件服務,並在同一時間重定向我的根目錄Fileserver對所有文件返回404
我的道路結構:
root/
->html
->static
->entry.go
我看到這裏的其他線程,他們都建議我做r.PathPrefix(「/」)。Handler(...),但這樣做使得它訪問任何文件之外的靜態返回NIL,包括我的HTML文件在我的項目的根目錄中有一個單獨的html文件,而且,重定向到它們中的任何一個都會返回404,Not Found。
下面的代碼:
package main
import (
"fmt"
"net/http"
"html/template"
"github.com/gorilla/mux"
"os"
)
func IfError(err error, quit bool) {
if err != nil {
fmt.Println(err.Error())
if(quit) {
os.Exit(1);
}
}
}
func NotFound(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(404)
t, _ := template.ParseFiles("html/404")
err := t.Execute(w, nil)
IfError(err, false)
}
func Home(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("html/home")
err := t.Execute(w, nil)
IfError(err, false)
}
func RedirectRoot(servefile http.Handler) http.Handler {
return http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/" {
redirect := r.URL.Host+"/home"
http.Redirect(w, r, redirect, http.StatusSeeOther)
} else {
servefile.ServeHTTP(w, r)
}
})
}
func main() {
r := mux.NewRouter()
ServeFiles := http.StripPrefix("/", http.FileServer(http.Dir("static/")))
r.Handle("/", RedirectRoot(ServeFiles))
r.HandleFunc("/home", Home)
r.NotFoundHandler = http.HandlerFunc(NotFound)
fmt.Printf("Listening ...")
IfError(http.ListenAndServe(":8081", r), true)
}
非常感謝您
但我想我的根目錄重定向到home /,訪問網站與您的imlementation會給我一個404,未找到,並favicon.ico將不會加載 – Whiteclaws
添加更多詳細信息的答案,請有看看。 – jeevatkm