假设我们有:
http.HandleFunc("/smth", smthPage)
http.HandleFunc("/", homePage)
当用户尝试错误的URL时,会看到一个普通的“404页面未找到”。我如何为这种情况返回一个自定义页面?
关于gorilla/mux的更新
对于那些使用纯net/http包的人来说,接受的答案是可以的。
如果你使用gorilla/mux,你应该使用这样的代码:
func main() {
r := mux.NewRouter()
r.NotFoundHandler = http.HandlerFunc(notFound)
}
并按照您的需要实现func notFound(w http.ResponseWriter, r *http.Request)
。
9条答案
按热度按时间9njqaruj1#
我通常这样做:
在这里,我简化了代码,只显示自定义404,但实际上我在这个设置中做了更多的事情:我使用
errorHandler
处理所有HTTP错误,在其中记录有用的信息并向自己发送电子邮件。dauxcl2d2#
下面是我选择的方法。它基于一个代码片段,因为我丢失了浏览器书签,所以我无法确认。
示例代码:(我把它放在我的主包里)
请自定义
func fire404
以输出您自己版本的错误404消息。如果您使用的是Gorilla Mux,您可能希望将main函数替换为:
如果代码有误,请大家指正,因为我是围棋新手,谢谢。
mpbci0fu3#
古老的线程,但我只是做了一些拦截
http.ResponseWriter
,可能是相关的。jexiocij4#
我认为最简单的方法是这样的:
如果地址不是/calulator或/history,则它处理notFoundHandler函数。
z9smfwbn5#
也许我错了,但我刚查了资料来源:http://golang.org/src/pkg/net/http/server.go
似乎指定自定义NotFound()函数几乎是不可能的:NotFoundHandler()返回一个名为NotFound()的硬编码函数。
也许你应该就此提出一个问题。
作为一种变通方法,您可以使用“/”处理程序,如果没有找到其他处理程序(因为它是最短的一个),这是一个回退。因此,检查该处理程序中是否存在页面并返回自定义404错误。
chy5wohz6#
您只需要创建自己的notFound处理程序,并将其注册到HandleFunc,以获取您不处理的路径。
如果您希望对路由逻辑进行最大程度的控制,则需要使用自己的自定义服务器和自定义处理程序类型。
这使您可以实现比HandleFunc更复杂的路由逻辑。
7vux5j2d7#
你可以定义
当访问没有找到资源时,它将执行到http.HandleFunc(“/",xxx)
webghufk8#
简而言之,只需检查r.URL.Path是否与您希望找到的URL匹配,例如通过循环遍历一个页面数组。
现在,我在一个名为drawPage的函数中这样做:
Last part is taken from @许晨峰
2ekbmq329#
您可以简单地使用类似于:
如果你需要一个标准的,只要写:
你会得到: