Я пишу веб-сервер, и у меня есть функция Not Found Handler. Все функции Handle, такие как вход в систему, регистрация, просмотр страницы, работают правильно. У меня тоже есть такая строка: router.NotFoundHandler = http.HandlerFunc(Handlers.NotFoundHandler)
Обработчики мой пакет, включающий следующий код:Golang gorilla mux not found handler не работает правильно
func NotFoundHandler(w http.ResponseWriter, r *http.Request) {
//title has to be 404.html
title := config.Page404
title = config.WebAppex + title
fmt.Println("title: " + title)
/*HERE IS QUESTION LINE*/
r = http.NewRequest("GET", config.Page404, nil)
fmt.Println(r.URL.Path)
logger.Info("Sending... ", title)
//load page
p, err := loadPage(title)
if err != nil {
logger.Error("ERROR : ", err.Error())
p, _ := loadPage(config.Page404)
fmt.Fprintf(w, "%s", p.body) //wired way to send HTML page
return //just return because of printing dry p.body
}
//serve it
http.ServeFile(w, r, p.dir)
logger.Info(p.dir, " has been sent")
}
Итак, проблема: если я стараюсь идти не на локальный: 8080/ничего, то я получаю мой хороший Page404 Но если я перейти на localhost: 8080/ничего/ничего или localhost: 8080/ничего/ничего/ничего и т. д., я получаю сухой 404.html без CSS. Поэтому я думал, что проблема в запросе, поэтому я создаю новый с помощью «/404.html» (это config.Page404), но ничего не изменилось. Я читал про gorilla mux Subrouter, бит Это может помочь исключить только localhost: 8080/ничего, но мне нужны все случаи. Итак, есть ли способы исключить все существующие страницы?
UPD: Мой loadPage функция:
func loadPage(title string) (*page, error) {
logger.Info("Trying to load", title)
//writing from title to body
body, err := ioutil.ReadFile(title)
if err != nil {
return nil, err
}
return &page{dir: config.HOMEDIR + title, body: body}, nil
}
type page struct {
dir string
body []byte
}
Спасибо!
Спасибо, в некоторой степени, я не знал о базовом теге Вы заставили меня спать этой ночью :) – utkillr