diff --git a/tree.go b/tree.go index eebc7f85..9f86dd48 100644 --- a/tree.go +++ b/tree.go @@ -237,12 +237,18 @@ func (t *Tree) addseg(segments []string, route interface{}, wildcards []string, regexpStr = "/" + regexpStr } } else if reg != "" { - for _, w := range params { - if w == "." || w == ":" { - continue + if seg == "*.*" { + regexpStr = "/([^.]+).(.+)" + } else { + for _, w := range params { + + if w == "." || w == ":" { + continue + } + regexpStr = "/([^/]+)" + regexpStr } - regexpStr = "/([^/]+)" + regexpStr } + } t.wildcard.addseg(segments[1:], route, append(wildcards, params...), reg+regexpStr) } else { @@ -396,6 +402,7 @@ func (leaf *leafInfo) match(wildcardValues []string) (ok bool, params map[string } return true, params } + if !leaf.regexps.MatchString(path.Join(wildcardValues...)) { return false, nil } diff --git a/tree_test.go b/tree_test.go index 30856d29..358898e7 100644 --- a/tree_test.go +++ b/tree_test.go @@ -42,6 +42,9 @@ func init() { routers = append(routers, testinfo{"/*.*", "/nice/api.json", map[string]string{":path": "nice/api", ":ext": "json"}}) routers = append(routers, testinfo{"/:name/*.*", "/nice/api.json", map[string]string{":name": "nice", ":path": "api", ":ext": "json"}}) routers = append(routers, testinfo{"/:name/test/*.*", "/nice/test/api.json", map[string]string{":name": "nice", ":path": "api", ":ext": "json"}}) + routers = append(routers, testinfo{"/dl/:width:int/:height:int/*.*", + "/dl/48/48/05ac66d9bda00a3acf948c43e306fc9a.jpg", + map[string]string{":width": "48", ":height": "48", ":ext": "jpg", ":path": "05ac66d9bda00a3acf948c43e306fc9a"}}) routers = append(routers, testinfo{"/v1/shop/:id:int", "/v1/shop/123", map[string]string{":id": "123"}}) routers = append(routers, testinfo{"/:year:int/:month:int/:id/:endid", "/1111/111/aaa/aaa", map[string]string{":year": "1111", ":month": "111", ":id": "aaa", ":endid": "aaa"}}) routers = append(routers, testinfo{"/v1/shop/:id/:name", "/v1/shop/123/nike", map[string]string{":id": "123", ":name": "nike"}})