diff --git a/tree.go b/tree.go index 78479b6f..8211274c 100644 --- a/tree.go +++ b/tree.go @@ -833,7 +833,7 @@ walk: // Outer loop for walking the tree return nil } - n = n.children[0] + n = n.children[len(n.children)-1] switch n.nType { case param: // Find param end (either '/' or path end) diff --git a/tree_test.go b/tree_test.go index b580007d..508a9fa7 100644 --- a/tree_test.go +++ b/tree_test.go @@ -751,6 +751,8 @@ func TestTreeFindCaseInsensitivePath(t *testing.T) { "/w/𠜎", // 4 byte "/w/𠜏/", // 4 byte longPath, + "/param/same/:id", + "/param/same/1", } for _, route := range routes { @@ -844,6 +846,7 @@ func TestTreeFindCaseInsensitivePath(t *testing.T) { {"/w/𠜎/", "/w/𠜎", true, true}, {"/w/𠜏", "/w/𠜏/", true, true}, {lOngPath, longPath, true, true}, + {"/param/same/prefix/noexist", "", false, false}, } // With fixTrailingSlash = true for _, test := range tests {