diff options
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/web.go | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/cmd/web.go b/cmd/web.go index 55546ea480..473688a8b8 100644 --- a/cmd/web.go +++ b/cmd/web.go @@ -51,6 +51,26 @@ and it takes care of all the other things for you`, }, } +func runHTTPRedirector() { + source := fmt.Sprintf("%s:%s", setting.HTTPAddr, setting.PortToRedirect) + dest := strings.TrimSuffix(setting.AppURL, "/") + log.Info("Redirecting: %s to %s", source, dest) + + handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + target := dest + r.URL.Path + if len(r.URL.RawQuery) > 0 { + target += "?" + r.URL.RawQuery + } + http.Redirect(w, r, target, http.StatusTemporaryRedirect) + }) + + var err = runHTTP(source, context2.ClearHandler(handler)) + + if err != nil { + log.Fatal(4, "Failed to start port redirection: %v", err) + } +} + func runWeb(ctx *cli.Context) error { if ctx.IsSet("config") { setting.CustomConf = ctx.String("config") @@ -124,6 +144,9 @@ func runWeb(ctx *cli.Context) error { case setting.HTTP: err = runHTTP(listenAddr, context2.ClearHandler(m)) case setting.HTTPS: + if setting.RedirectOtherPort { + go runHTTPRedirector() + } err = runHTTPS(listenAddr, setting.CertFile, setting.KeyFile, context2.ClearHandler(m)) case setting.FCGI: listener, err := net.Listen("tcp", listenAddr) |