diff --git a/config/server.go b/config/server.go index 3fbb52c2..87b3e174 100644 --- a/config/server.go +++ b/config/server.go @@ -86,6 +86,11 @@ type Server struct { // // Default is empty "" VListeningAddr string + // VScheme if setted to not empty value then all template's helper funcs prepends that as the url scheme instead of the real scheme + // server's .Scheme returns VScheme if not empty && differs from real scheme + // + // Default is empty "" + VScheme string // Name the server's name, defaults to "iris". // You're free to change it, but I will trust you to don't, this is the only setting whose somebody, like me, can see if iris web framework is used Name string @@ -133,6 +138,7 @@ func DefaultServer() Server { RedirectTo: "", Virtual: false, VListeningAddr: "", + VScheme: "", } } diff --git a/http.go b/http.go index ebbac032..f99ce9a2 100644 --- a/http.go +++ b/http.go @@ -333,6 +333,13 @@ func (s *Server) Scheme() string { if s.IsSecure() || (s.Config.CertFile != "" && s.Config.KeyFile != "") { scheme = "https://" } + // but if virtual scheme is setted and it differs from the real scheme, return the vscheme + // the developer should set it correctly, http:// or https:// or anything at the future:P + vscheme := s.Config.VScheme + if len(vscheme) > 0 && vscheme != scheme { + return vscheme + } + return scheme } diff --git a/iris.go b/iris.go index 4d983c1c..e241268a 100644 --- a/iris.go +++ b/iris.go @@ -798,10 +798,7 @@ func (s *Framework) URL(routeName string, args ...interface{}) (url string) { return } srv := s.Servers.Main() - scheme := "http://" - if srv.IsSecure() { - scheme = "https://" - } + scheme := s.Servers.Main().Scheme() host := srv.Host() arguments := args[0:]