gddo-server: enable redirects talks.godoc.org and www.godoc.org
With the move away from nginx, all redirects need to be reimplmented
in gddo-server. This implements the redirect to send talks.godoc.org
to the go-talks App Engine project and www.godoc.org to godoc.org. In
nginx these were 301 redirects. I am making them 302 redirects now
because in the future these redirects are likely to change.
go-talks is just a standard App Engine app. There is no reason we
cannot run go-talks directly from the the talks.godoc.org domain and
likely will in the future.
Change-Id: I4b3e8dda74d31daeba8bd961932f774c6ff1442f
Reviewed-on: https://go-review.googlesource.com/21588
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/gddo-server/main.go b/gddo-server/main.go
index 0105793..e712a22 100644
--- a/gddo-server/main.go
+++ b/gddo-server/main.go
@@ -789,6 +789,19 @@
h.ServeHTTP(resp, req)
}
+// otherDomainHandler redirects to another domain keeping the rest of the URL.
+type otherDomainHandler struct {
+ scheme string
+ targetDomain string
+}
+
+func (h otherDomainHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
+ u := *req.URL
+ u.Scheme = h.scheme
+ u.Host = h.targetDomain
+ http.Redirect(w, req, u.String(), http.StatusFound)
+}
+
func defaultBase(path string) string {
p, err := build.Default.Import(path, "", build.FindOnly)
if err != nil {
@@ -950,7 +963,12 @@
cacheBusters.Handler = mux
- var root http.Handler = rootHandler{{"api.", apiMux}, {"", mux}}
+ var root http.Handler = rootHandler{
+ {"api.", apiMux},
+ {"talks.godoc.org", otherDomainHandler{"https", "go-talks.appspot.com"}},
+ {"www.godoc.org", otherDomainHandler{"https", "godoc.org"}},
+ {"", mux},
+ }
if gceLogName != "" {
logc, err := logging.NewClient(ctx, projID, gceLogName)
if err != nil {