2016-01-28 2 views
0

Я пишу веб-сервер, и у меня есть функция 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 
} 

Спасибо!

ответ

0

Возможно, вы используете страницу 404 с относительным стилем таблицы стилей CSS, что, очевидно, не удастся при ее обслуживании с вложенной страницы, например /nothing/nothing/nothing.

Используйте тег <base>, чтобы получить абсолютные ссылки во всем мире, или перенаправить запрос на нужную страницу.

+0

Спасибо, в некоторой степени, я не знал о базовом теге Вы заставили меня спать этой ночью :) – utkillr

Смежные вопросы