wangchuanjin 3 недель назад
Родитель
Сommit
bbc834d8b6
1 измененных файлов с 18 добавлено и 2 удалено
  1. 18 2
      go-xweb/xweb/server.go

+ 18 - 2
go-xweb/xweb/server.go

@@ -7,6 +7,8 @@ import (
 	"net/http"
 	"net/http/pprof"
 	"os"
+	"path"
+	"regexp"
 	"runtime"
 	runtimePprof "runtime/pprof"
 	"strconv"
@@ -215,7 +217,7 @@ func (s *Server) RunBase(addr string, mux *http.ServeMux) {
 	mux.Handle("/", s)
 
 	s.Logger.Infof("http server is listening %s", addr)
-	err := endless.ListenAndServe(addr, mux, func() {})
+	err := endless.ListenAndServe(addr, s.Handler(mux), func() {})
 	if err != nil {
 		s.Logger.Error("ListenAndServe:", err)
 	}
@@ -271,7 +273,7 @@ func (s *Server) Run(addr string) {
 	mux.Handle("/", s)
 
 	s.Logger.Infof("http server is listening %s", addr)
-	err := endless.ListenAndServe(addr, mux, func() {})
+	err := endless.ListenAndServe(addr, s.Handler(mux), func() {})
 	if err != nil {
 		s.Logger.Error("ListenAndServe:", func() {})
 	}
@@ -360,3 +362,17 @@ func (s *Server) App(name string) *App {
 	}
 	return nil
 }
+
+func (s *Server) Handler(mux *http.ServeMux) http.Handler {
+	keepOriginalUrl, _ := s.GetConfig("keepOriginalUrl").(string)
+	if keepOriginalUrl == "" {
+		return mux
+	}
+	keepOriginalUrlReg := regexp.MustCompile(keepOriginalUrl)
+	return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
+		if keepOriginalUrlReg.MatchString(r.URL.Path) {
+			r.URL.Path = path.Clean(r.URL.Path)
+		}
+		mux.ServeHTTP(w, r)
+	})
+}