go - Golang 中的 HTTP 重定向

标签 go proxy httprequest reverse-proxy

我有这个域名http://mynewurl.com/ , 哪个帧转发到 - http://oldurl.com:8000我为博客运行的 Go 服务器。

我需要为每个帖子映射正确设置 URL

由于目前访问主页上的链接完全掩盖了 URL,因此任何共享(希望使用网络提及)都不会引用该帖子的 URL,而是引用主 URL……

但我想知道是否可以让 Golang 更好地播放并在新的 URL 上收听?

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

最佳答案

查看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
}

关于go - Golang 中的 HTTP 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28436506/

相关文章:

html - 不正确的引用 URL - 可能是什么原因?

docker - 无法使用 docker 存储库中 vendor 目录中的包

Golang 基准测试 : why does allocs/op show 0 B/op?

google-app-engine - AppEngine 的 datastore.Get() 是否不验证所请求 key 的命名空间?

javascript - Nodejs 代理脚本,不适用于 mod_deflate

c# - System.Net.Http.HttpRequestException : Device not configured ---> System.Net.Sockets.SocketException:设备未配置

go - 如何使用 Artifactory 作为 Go 模块的本地存储库

android - 如何在 Android 上捕获应用程序流量

android - 移动网络数据连接的代理设置

linux - 使用 linux bash 同时向多个主机发送 http-get 请求