url 的 Gorilla Mux 正则表达式与完整 url 不匹配

标签 go gorilla mux

我应该使用什么正则表达式来匹配以下 url 作为 full_path?

https://edition.cnn.com/search\?q\=test\&size\=10\&category\=us,politics,world,opinion,health

(?:www.|http\:\/\/|https\:\/\/).*} 不起作用,它仅匹配 www. 直到搜索

    sm := mux.NewRouter()
    sm.HandleFunc("/", getIndex).Methods("GET")
    sm.HandleFunc(`/api/v1/hostname/{full_path:(?:www.|http\:\/\/|https\:\/\/).*}`, URLHandler)

更新处理程序是:

func URLHandler(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    url := vars["full_path"]

    fmt.Fprintf(w, "Full path is: ", url)
}

编辑2:

这对我有用

sm := mux.NewRouter().SkipClean(true).UseEncodedPath()
sm.HandleFunc("/", getIndex).Methods("GET")
sm.HandleFunc(`/api/v1/hostname/{full_path:.+`, URLHandler)

在处理程序上,我使用了 url.PathUnescape(r.URL.RequestURI())xurls提取网址

func URLHandler(w http.ResponseWriter, r *http.Request) {
    URL, _ := url.PathUnescape(r.URL.RequestURI())
    ext := xurls.Strict().FindAllString(URL, -1)
    fmt.Fprintf(w, "Full path is: ", ext)
}

最佳答案

我认为 gorilla mux 只会使用路径部分,而不使用 URL 的查询字符串。尝试附加 RawQuery

类似这样的事情:

func URLHandler(w http.ResponseWriter, r *http.Request) {
    vars := mux.Vars(r)
    url := vars["full_path"] + "?" 
    if r.URL.RawQuery != "" {
        url += "?" + r.URL.RawQuery
    }
    fmt.Fprintf(w, "Full url is: ", url)
}

关于url 的 Gorilla Mux 正则表达式与完整 url 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60347195/

相关文章:

go - 如何将对象附加到 slice ?

go - golang ast遍历中如何从子节点检索父节点?

sql - 我可以将 gorilla 模式与 sql.NullString 一起使用吗?

Go 的 session 中间件?

go - 使用http Mux请求正文验证

gorilla mux 中间件 : wrapping a handler

go - golang 中的 ssh 服务器

mongodb - Mgo 聚集体 : how to reuse model types to query and unmarshal "mixed" results?

session - 为什么要使用 gorilla/context 而不是 session 来进行用户身份验证?

http - 动态路由的文件服务器目录