diff options
| -rw-r--r-- | cmd/golangorg/server.go | 7 | ||||
| -rw-r--r-- | cmd/golangorg/testdata/blog.txt | 7 |
2 files changed, 11 insertions, 3 deletions
diff --git a/cmd/golangorg/server.go b/cmd/golangorg/server.go index 368d7f19..8a7d17a2 100644 --- a/cmd/golangorg/server.go +++ b/cmd/golangorg/server.go @@ -377,14 +377,15 @@ var validHosts = map[string]bool{ } // hostEnforcerHandler redirects http://foo.golang.org/bar to https://golang.org/bar. -// It also forces all requests coming from China to use golang.google.cn. +// It also forces all requests coming from China for golang.org to use golang.google.cn. func hostEnforcerHandler(h http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { isHTTPS := r.TLS != nil || r.Header.Get("X-Forwarded-Proto") == "https" || r.URL.Scheme == "https" defaultHost := "golang.org" - isValidHost := validHosts[strings.ToLower(r.Host)] + host := strings.ToLower(r.Host) + isValidHost := validHosts[host] - if googleCN(r) { + if googleCN(r) && strings.HasSuffix(host, "golang.org") { // golang.google.cn is the only web site in China. defaultHost = "golang.google.cn" isValidHost = strings.ToLower(r.Host) == defaultHost diff --git a/cmd/golangorg/testdata/blog.txt b/cmd/golangorg/testdata/blog.txt index 4c7afc25..496cffed 100644 --- a/cmd/golangorg/testdata/blog.txt +++ b/cmd/golangorg/testdata/blog.txt @@ -51,3 +51,10 @@ redirect == https://go.dev/blog/go1.16 GET https://go.dev/blog/go1.16 body contains Go 1.16 + +GET https://blog.golang.org/?googlecn=1 +redirect == https://golang.google.cn/?googlecn=1 + +# Do not China-redirect go.dev links, because they will break. +GET https://go.dev/blog/?googlecn=1 +body contains The Go Blog |
