Skip to content

Commit 84da507

Browse files
committed
Fixes the uses of caret(^) in rewrite regex
1 parent d324506 commit 84da507

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

middleware/rewrite.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,11 @@ 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+
k = strings.Replace(k, `\^`, "^", -1)
6263
k = k + "$"
64+
if strings.HasPrefix(k, "/") {
65+
k = "^" + k
66+
}
6367
config.rulesRegex[regexp.MustCompile(k)] = v
6468
}
6569

middleware/rewrite_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ func TestRewrite(t *testing.T) {
1818
"/api/*": "/$1",
1919
"/js/*": "/public/javascripts/$1",
2020
"/users/*/orders/*": "/user/$1/order/$2",
21+
"/foo/*": "/v1/foo/$1",
22+
"/v1/foo/*": "/v1/foo/$1",
23+
"/v2/foo/*": "/v2/foo/$1",
24+
"^/bar/*": "/foobar/$1",
2125
},
2226
}))
2327
req := httptest.NewRequest(http.MethodGet, "/", nil)
@@ -37,6 +41,18 @@ func TestRewrite(t *testing.T) {
3741
req.URL.Path = "/api/new users"
3842
e.ServeHTTP(rec, req)
3943
assert.Equal(t, "/new users", req.URL.Path)
44+
req.URL.Path = "/foo/bar"
45+
e.ServeHTTP(rec, req)
46+
assert.Equal(t, "/v1/foo/bar", req.URL.Path)
47+
req.URL.Path = "/v1/foo/bar"
48+
e.ServeHTTP(rec, req)
49+
assert.Equal(t, "/v1/foo/bar", req.URL.Path)
50+
req.URL.Path = "/v2/foo/bar"
51+
e.ServeHTTP(rec, req)
52+
assert.Equal(t, "/v2/foo/bar", req.URL.Path)
53+
req.URL.Path = "/bar/baz"
54+
e.ServeHTTP(rec, req)
55+
assert.Equal(t, "/foobar/baz", req.URL.Path)
4056
}
4157

4258
// Issue #1086

0 commit comments

Comments
 (0)