Go lang中的HTTP重定向

时间:2015-02-10 16:18:27

标签: go proxy reverse-proxy http-request

我有这个域http://mynewurl.com/,哪个框架转发到 - http://oldurl.com:8000我正在为博客运行服务器。

我需要正确地为每个帖子地图设置网址

目前访问主页面上的链接完全屏蔽了URL,因此任何共享(希望使用网页)都不会引用该帖子网址,而是引用主网址......

但我想知道我是否可以让golang更好地发挥并聆听新网址?

func main() {
  http.HandleFunc("/", handlerequest)
  http.ListenAndServe(":8000", nil)
}

1 个答案:

答案 0 :(得分:2)

查看httputil.ReverseProxy

我用它来实现基本上执行你所描述的请求转储器 - 监听特定端口并转发到某个URL。

这是示例代码。里程可能会有所不同,因为我刚刚删除了与我在代理中所做的实际工作相关的部分,并留下了做路由的部分。 但这可能是一个起点。

func SetProxy(targetUrl string) (newUrl string, err error) {
    var target *url.URL
    target, err = url.Parse(targetUrl)
    if err != nil {
        return "", err
    }
    origHost := target.Host
    origScheme := target.Scheme
    d := func(req *http.Request) {
        req.URL.Host = origHost
        req.URL.Scheme = origScheme
    }

    p := &httputil.ReverseProxy{Director: d,}
    http.HandleFunc("/", p)

    target.Host = "localhost:8000"
    target.Scheme = "http"
    newUrl = target.String()
    go func() {
        err = http.ListenAndServe(":"+localPort, nil)
        if err != nil {
            panic(err)
        }
    }()

    return newUrl, nil
}