diff --git a/mw_url_rewrite.go b/mw_url_rewrite.go index fab7a380807..6d97a2dc33c 100644 --- a/mw_url_rewrite.go +++ b/mw_url_rewrite.go @@ -413,27 +413,34 @@ func checkPathParts(r *http.Request, options map[string]apidef.StringRegexMap, a contextData := ctxGetData(r) fCount := 0 for mv, mr := range options { - pathParts := strings.Split(r.URL.Path, "/") - - for _, part := range pathParts { - println("part") - println(part) - println("mr.NotMatchPattern") - println(mr.NotMatchPattern) - println("mr.MatchPattern") - println(mr.MatchPattern) - triggered, b := mr.Check(part) - println("triggered") - println(triggered) - - if triggered { + + // Check URL as a whole for NotMatchRegex + triggered, b := mr.Check(r.URL.Path) + if triggered { + pathParts := strings.Split(r.URL.Path, "/") + for _, part := range pathParts { + println("part") + println(part) + println("mr.NotMatchPattern") + println(mr.NotMatchPattern) + println("mr.MatchPattern") + println(mr.MatchPattern) + _, b = mr.Check(part) + println("triggered") + println(triggered) + + if len(b) > 0 { kn := fmt.Sprintf("trigger-%d-%s-%d", triggernum, mv, fCount) contextData[kn] = b + fCount++ } - fCount++ + + } } + + } if fCount > 0 { diff --git a/mw_url_rewrite_test.go b/mw_url_rewrite_test.go index cee0287c8a3..32fd642cb30 100644 --- a/mw_url_rewrite_test.go +++ b/mw_url_rewrite_test.go @@ -211,7 +211,7 @@ func TestRewriterTriggers(t *testing.T) { hOpt2.Init() return TestDef{ - "Header Multi Mixed All Fail", + "Header Multi Mixed Logic All Fail", "/test/straight/rewrite", "/change/to/me/ignore", "/test/straight/rewrite", "/change/to/me/ignore", []apidef.RoutingTrigger{ @@ -271,7 +271,7 @@ func TestRewriterTriggers(t *testing.T) { hOpt2.Init() return TestDef{ - "Header Multi Mixed All Pass", + "Header Multi Mixed Logic All Pass", "/test/straight/rewrite", "/change/to/me/ignore", "/test/straight/rewrite", "/change/to/me/hello", []apidef.RoutingTrigger{ @@ -698,6 +698,32 @@ func TestRewriterTriggers(t *testing.T) { r, } }, + func() TestDef { + r, _ := http.NewRequest("GET", "/test/foo/rewrite/foo", nil) + hOpt1 := apidef.StringRegexMap{MatchPattern: "foo"} + hOpt1.Init() + hOpt2 := apidef.StringRegexMap{MatchPattern: "baz"} + hOpt2.Init() + + return TestDef{ + "PathPart MoreParts Multi Fail", + "/test/foo/rewrite/foo", "/change/to/me/ignore", + "/test/foo/rewrite/foo", "/change/to/me/ignore", + []apidef.RoutingTrigger{ + { + On: apidef.Any, + Options: apidef.RoutingTriggerOptions{ + PathPartMatches: map[string]apidef.StringRegexMap{ + "pathpart1": hOpt1, + "pathpart2": hOpt2, + }, + }, + RewriteTo: "/change/to/me/$tyk_context.trigger-0-pathpart1-0/biz/$tyk_context.trigger-0-pathpart1-1", + }, + }, + r, + } + }, func() TestDef { r, _ := http.NewRequest("GET", "/test/foo/rewrite", nil) hOpt := apidef.StringRegexMap{MatchPattern: "bar"}