为了账号安全,请及时绑定邮箱和手机立即绑定

Golang gorilla mux 未找到处理程序无法正常工作

Golang gorilla mux 未找到处理程序无法正常工作

Go
千万里不及你 2021-12-07 16:37:56
我正在编写一个 web 服务器,我有 Not Found Handler 函数。登录、注册、查看页面等所有处理功能均正常工作。我也有这样的一行: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}谢谢!
查看完整描述

1 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

您可能正在使用相对的 CSS 样式表路径为 404 页面提供服务,当从/nothing/nothing/nothing.

要么使用该<base>标签在任何地方获取绝对链接,要么将您的请求重定向到想要的页面。


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 174 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信