我最近询问过如何使用Gorilla mux提供静态内容和处理404;使用Handle而不是PathPrefix时,应用程序可以提供根页面(http://localhost:8888):
setProperty
然而,根页面内的页面请求(例如http://localhost:8888/demo/page1.html)被404处理程序拦截。有没有办法防止这种情况,同时捕获对不存在的页面或服务的请求?这是目录结构:
func main() {
r := mux.NewRouter()
r.HandleFunc("/myService", ServiceHandler)
r.Handle("/", http.FileServer(http.Dir("./static")))
r.NotFoundHandler = http.HandlerFunc(notFound)
l, _ := net.Listen("tcp", "8888")
http.Serve(l, r)
}
上一个问题:
我正在使用Gorilla mux工具包来处理Web服务器应用程序中的http请求:
...
main.go
static\
| index.html
demo\
page1.html
demo.js
demo.css
| jquery\
| <js files>
| images\
| <png files>
我想为无效的URL添加处理程序,但永远不会调用它:
func main() {
r := mux.NewRouter()
r.HandleFunc("/myService", ServiceHandler)
r.PathPrefix("/").Handler(http.FileServer(http.Dir("./static")))
l, _ := net.Listen("tcp", "8888")
http.Serve(l, r)
}
如果删除静态处理程序,则会调用未找到的处理程序。但是,应用程序需要从非绝对路径提供静态内容。有没有办法将其与404处理相结合?
答案 0 :(得分:1)
我怀疑r.PathPrefix("/").Handler()
会匹配任何路径,导致notfound
处理程序无用。
如&#34; route.go
&#34;
// Note that it does not treat slashes specially
// ("`/foobar/`" will be matched by the prefix "`/foo`")
// so you may want to use a trailing slash here.
如果您使用PathPrefix
(如those tests中所述),请将其用于特定路径,而不是通用&#34; /
&#34;。