diff --git a/handler/proxy.go b/handler/proxy.go index 4a1d94a..dec0650 100644 --- a/handler/proxy.go +++ b/handler/proxy.go @@ -62,6 +62,9 @@ func makeProxy(upstream string, path *model.HttpPath, index int) *httputil.Rever directiveHandlers := []func(r *http.Request){} if len(path.Directives) > 0 { for _, directive := range path.Directives { + if !strings.HasPrefix(directive, "Proxy_") { + continue + } ndirective := strings.TrimPrefix(directive, "Proxy_") d := strings.Replace(string(ndirective), "$target", upstream, 1) dh := GetUpdaterFn(d) diff --git a/server/directive.go b/server/directive.go index 0e6a54a..2a74723 100644 --- a/server/directive.go +++ b/server/directive.go @@ -67,6 +67,19 @@ var BasicAuthDirective Directive = func(args ...string) Middleware { return BasicAuth } +var RedirectDirective Directive = func(args ...string) Middleware { + return func(w http.ResponseWriter, r *http.Request, next http.Handler) { + l := gologger.GetLogger("Directive") + l.Debug("Redirect") + if len(args) < 1 { + http.Error(w, "Redirect directive requires a URL", http.StatusBadRequest) + return + } + targetURL := args[0] + r.URL.Path + http.Redirect(w, r, targetURL, http.StatusFound) + } +} + // 在DirectiveMap中注册新指令 var DirectiveMap = map[string]Directive{ "Set-Header": Set_Header, @@ -75,4 +88,5 @@ var DirectiveMap = map[string]Directive{ "Record-Access": DRecordAccess, "Jwt-Auth": JWTDirective, "Basic-Auth": BasicAuthDirective, + "Redirect": RedirectDirective, }