Skip to content

Commit cf2fcad

Browse files
authored
Merge pull request #1588 from choyri/bugfix/rewrite
Fixes the uses of caret(^) in rewrite regex
2 parents bcb3165 + 3dbd5dc commit cf2fcad

File tree

2 files changed

+30
-0
lines changed

2 files changed

+30
-0
lines changed

middleware/rewrite.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ func RewriteWithConfig(config RewriteConfig) echo.MiddlewareFunc {
5959
for k, v := range config.Rules {
6060
k = regexp.QuoteMeta(k)
6161
k = strings.Replace(k, `\*`, "(.*)", -1)
62+
if strings.HasPrefix(k, `\^`) {
63+
k = strings.Replace(k, `\^`, "^", -1)
64+
}
6265
k = k + "$"
6366
config.rulesRegex[regexp.MustCompile(k)] = v
6467
}

middleware/rewrite_test.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,3 +94,30 @@ func TestRewriteWithConfigPreMiddleware_Issue1143(t *testing.T) {
9494
assert.Equal(t, "hosts", string(bodyBytes))
9595
}
9696
}
97+
98+
// Issue #1573
99+
func TestEchoRewriteWithCaret(t *testing.T) {
100+
e := echo.New()
101+
102+
e.Pre(RewriteWithConfig(RewriteConfig{
103+
Rules: map[string]string{
104+
"^/abc/*": "/v1/abc/$1",
105+
},
106+
}))
107+
108+
rec := httptest.NewRecorder()
109+
110+
var req *http.Request
111+
112+
req = httptest.NewRequest(http.MethodGet, "/abc/test", nil)
113+
e.ServeHTTP(rec, req)
114+
assert.Equal(t, "/v1/abc/test", req.URL.Path)
115+
116+
req = httptest.NewRequest(http.MethodGet, "/v1/abc/test", nil)
117+
e.ServeHTTP(rec, req)
118+
assert.Equal(t, "/v1/abc/test", req.URL.Path)
119+
120+
req = httptest.NewRequest(http.MethodGet, "/v2/abc/test", nil)
121+
e.ServeHTTP(rec, req)
122+
assert.Equal(t, "/v2/abc/test", req.URL.Path)
123+
}

0 commit comments

Comments
 (0)