dscs63759 2016-08-08 21:54
浏览 162
已采纳

在Go中没有办法从https:// www ..重定向到https:// ..吗?

I saw this post by someone here but there are no answers: Redirecting https://www.domain.com to https://domain.com in Go

I tried to see if I could find a way to check if the request was made with a www url by checking the variables in *http.Request variable but all I got was relative paths and empty strings "".

I tried to fmt.Println() these variables:

func handleFunc(w http.ResponseWriter, r *http.Request) {
    fmt.Println(r.URL.string())
    fmt.Println(r.Host)
    fmt.Println(r.RequestURI)
}

But none of these variables contained the absolute path with the www part. How can I check if a request was made from a www url? I want to figure this out so that I can redirect from www to non-www.

Is this really not even possible in Go? Some people suggested putting nginx in front of Go, but there has to be a way without nginx right? Do I really need to install and use nginx in front of Go just to do a simple redirect from www to non-www? This does not seem like a good solution to a seemingly small problem.

Is there no way to achieve this?

  • 写回答

1条回答 默认 最新

  • douqiang5933 2016-08-08 22:07
    关注

    Wrap your handlers with a redirector:

    func wwwRedirect(h http.Handler) http.Handler {
      return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if host := strings.TrimPrefix(r.Host, "www."); host != r.Host {
            // Request host has www. prefix. Redirect to host with www. trimmed.
            u := *r.URL
            u.Host = host
            u.Scheme = "https"
            http.Redirect(w, r, u.String(), http.StatusFound)
            return
        }
        h.ServeHTTP(w, r)
      })
    }
    

    Use the redirector like this:

    log.Fatal(http.ListenAndServeTLS(addr, certFile, keyFile, wwwRedirect(handler))
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 simulink如何调用DLL文件
  • ¥15 关于用pyqt6的项目开发该怎么把前段后端和业务层分离
  • ¥30 线性代数的问题,我真的忘了线代的知识了
  • ¥15 有谁能够把华为matebook e 高通骁龙850刷成安卓系统,或者安装安卓系统
  • ¥188 需要修改一个工具,懂得汇编的人来。
  • ¥15 livecharts wpf piechart 属性
  • ¥20 数学建模,尽量用matlab回答,论文格式
  • ¥15 昨天挂载了一下u盘,然后拔了
  • ¥30 win from 窗口最大最小化,控件放大缩小,闪烁问题
  • ¥20 易康econgnition精度验证