所以我有一个奇怪的问题,一些路由可以工作,而另一些不能。我将首先展示我的主函数,然后给出问题的例子。
func main() {
http.HandleFunc("/", home)
http.HandleFunc("/project", project)
http.HandleFunc("/about", about)
http.HandleFunc("/contact", contact)
http.Handle("/resources/", http.StripPrefix("/resources", http.FileServer(http.Dir("./assets"))))
err := http.ListenAndServe(":80", nil)
if err != nil {
fmt.Println("ListendAndServe doesn't work : ", err)
}
}例如,路由"/contact/“不起作用,当我运行此代码并转到localhost/contact时,它会将我转到主页。但是,当我将Handlefunc中的路由更改为"/contactos“,然后转到本地主机/contactos时,它确实起作用了。
另一个例子,"/project“现在可以用了,但是当我把它改成"/projects”时,它就不能用了。
发布于 2021-10-07 14:07:49
请注意,如果您注册了/project/ (注意尾部斜杠),那么/project/和/project都将工作(带或不带尾部斜杠)。如果您注册了/project (没有尾随斜杠),那么只有/project可以工作,根处理程序/将匹配/project/。
如果子树已注册,并且收到命名没有其尾随斜杠的子树根的请求,则ServeMux会将该请求重定向到子树根(添加尾随斜杠)。可以使用不带尾随斜杠的路径的单独注册来覆盖此行为。例如,注册"/images/“会导致ServeMux将对"/images”的请求重定向到"/images/",除非单独注册了"/images“。
查看相关问题:
How to map to the same function with a pattern that ends with or with "/" with http.HandleFunc
https://stackoverflow.com/questions/69482413
复制相似问题