Golang gorilla mux 未找到处理程序无法正常工作
Golang gorilla mux not found handler doesn't work correct
我正在编写一个 Web 服务器,并且我有 Not Found Handler 函数。
登录、注册、查看页面等所有 Handle 功能均正常运行。
我也有这样的行:router.NotFoundHandler = http.HandlerFunc(Handlers.NotFoundHandler)
Handlers 是我的包,包括下一个代码:
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")
}
所以问题是:如果我尝试转到 localhost:8080/nothing,那么我会得到漂亮的 Page404
但是,如果我去 localhost:8080/nothing/nothing 或 localhost:8080/nothing/nothing/nothing 等等,我会干 404.html 而没有任何 CSS。所以我认为问题是请求,所以我用“/404.html”(它是config.Page404)的方式创建新的,但没有任何改变。我阅读了有关 gorilla mux Subrouter 的信息,它可能有助于仅排除 localhost:8080/nothing,但我需要所有情况。那么有什么方法可以排除所有不存在的页面吗?
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
}
谢谢!
您可能使用相对 CSS 样式表路径提供 404 页面,当从 /nothing/nothing/nothing
.
这样的嵌套页面提供它时显然会失败
要么使用 <base>
标签获得绝对链接,要么将您的请求重定向到所需页面。
我正在编写一个 Web 服务器,并且我有 Not Found Handler 函数。
登录、注册、查看页面等所有 Handle 功能均正常运行。
我也有这样的行:router.NotFoundHandler = http.HandlerFunc(Handlers.NotFoundHandler)
Handlers 是我的包,包括下一个代码:
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")
}
所以问题是:如果我尝试转到 localhost:8080/nothing,那么我会得到漂亮的 Page404 但是,如果我去 localhost:8080/nothing/nothing 或 localhost:8080/nothing/nothing/nothing 等等,我会干 404.html 而没有任何 CSS。所以我认为问题是请求,所以我用“/404.html”(它是config.Page404)的方式创建新的,但没有任何改变。我阅读了有关 gorilla mux Subrouter 的信息,它可能有助于仅排除 localhost:8080/nothing,但我需要所有情况。那么有什么方法可以排除所有不存在的页面吗?
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
}
谢谢!
您可能使用相对 CSS 样式表路径提供 404 页面,当从 /nothing/nothing/nothing
.
要么使用 <base>
标签获得绝对链接,要么将您的请求重定向到所需页面。