From 98542cefaaa9d25feda8d067d22a0edf46fec3d4 Mon Sep 17 00:00:00 2001 From: John Date: Mon, 16 Apr 2018 18:26:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=A8=A1=E7=B3=8A=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E8=B7=AF=E7=94=B1=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- g/net/ghttp/http_server_router.go | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/g/net/ghttp/http_server_router.go b/g/net/ghttp/http_server_router.go index fdd400dbc..c8f663918 100644 --- a/g/net/ghttp/http_server_router.go +++ b/g/net/ghttp/http_server_router.go @@ -192,18 +192,7 @@ func (s *Server) searchHandlerDynamic(r *Request) *handlerCacheItem { if _, ok := p.(map[string]interface{})["*list"]; ok { lists = append(lists, p.(map[string]interface{})["*list"].(*list.List)) } - if _, ok := p.(map[string]interface{})[v]; !ok { - if _, ok := p.(map[string]interface{})["/"]; ok { - p = p.(map[string]interface{})["/"] - if k == len(array) - 1 { - if _, ok := p.(map[string]interface{})["*list"]; ok { - lists = append(lists, p.(map[string]interface{})["*list"].(*list.List)) - } - } - } else { - break - } - } else { + if _, ok := p.(map[string]interface{})[v]; ok { p = p.(map[string]interface{})[v] if k == len(array) - 1 { if _, ok := p.(map[string]interface{})["*list"]; ok { @@ -211,6 +200,15 @@ func (s *Server) searchHandlerDynamic(r *Request) *handlerCacheItem { } } } + // 如果是叶子节点,同时判断当前层级的"/"键名,解决例如:/user/*action 匹配 /user 的规则 + if k == len(array) - 1 { + if _, ok := p.(map[string]interface{})["/"]; ok { + p = p.(map[string]interface{})["/"] + if _, ok := p.(map[string]interface{})["*list"]; ok { + lists = append(lists, p.(map[string]interface{})["*list"].(*list.List)) + } + } + } } // 多层链表遍历检索,从数组末尾的链表开始遍历,末尾的深度高优先级也高 @@ -261,7 +259,7 @@ func (s *Server) patternToRegRule(rule string) (regrule string, names string) { } names += v[1:] case '*': - regrule += `/(.*)` + regrule += `/{0,1}(.*)` if len(names) > 0 { names += "," }