我有这段代码
func main() {
router := mux.NewRouter()
router.HandleFunc("/", rootHandler)
router.HandleFunc("/xyz/{url}", urlHandler)
http.Handle("/", router)
log.Fatal(http.ListenAndServe(":8080", nil))
}
使用此网址:http://localhost:8080/xyz/https%3A%2F%2Fabc.no%2FJZ2las1o3Ct
多路复用器将重定向(301)
http://localhost:8080/xyz/https:/abc.no/JZ2las1o3Ct
如果我将%2F%2F
更改为仅一个(%2F
),我就不会被重定向,并且转义字符会被转义。
我找到了对router.SkipClean(true)
的引用,但它对Mux如何处理这个没有任何区别。
我想要的是,mux变量url
应该包含https%3A%2F%2Fabc.no%2FJZ2las1o3Ct
答案 0 :(得分:0)
您在这里寻找的是UseEncodedPath
设置。
https://godoc.org/github.com/gorilla/mux#Router.UseEncodedPath
mux中的默认行为是解码URL,然后进行路径匹配。
如果打开UseEncodedPath,它将不会解码path参数,并且当您访问处理程序内部的path参数时,它将仍然被编码。
此时,您可以使用go QueryUnescape
函数选择是否要解码参数。
答案 1 :(得分:-1)
您可以使用QueryUnescape
删除空格和其他网址编码参数。
请查找function