From b810c9a3ca2b4a1ae2977856d1725221e81e3f11 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Sat, 8 Oct 2016 15:49:41 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AE=80=E5=8C=96Route=E7=B1=BB=E7=9A=84?= =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=8F=82=E6=95=B0=E5=A4=84=E7=90=86=20?= =?UTF-8?q?=E6=94=B9=E8=BF=9B=E5=90=88=E5=B9=B6=E5=8F=82=E6=95=B0=E7=9A=84?= =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Route.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/library/think/Route.php b/library/think/Route.php index 2a454af7..883082e7 100644 --- a/library/think/Route.php +++ b/library/think/Route.php @@ -1115,6 +1115,10 @@ class Route $len2 = substr_count($rule, '/'); // 多余参数是否合并 $merge = !empty($option['merge_extra_vars']) ? true : false; + if ($merge && $len1 > $len2) { + $url = str_replace('|', $depr, $url); + $url = implode('|', explode($depr, $url, $len2 + 1)); + } if ($len1 >= $len2 || strpos($rule, '[')) { if (!empty($option['complete_match'])) { @@ -1219,13 +1223,12 @@ class Route * @param string $url URL地址 * @param string $rule 路由规则 * @param array $pattern 变量规则 - * @param bool $merge 合并额外变量 * @return array|false */ - private static function match($url, $rule, $pattern, $merge) + private static function match($url, $rule, $pattern) { $m2 = explode('/', $rule); - $m1 = $merge ? explode('|', $url, count($m2)) : explode('|', $url); + $m1 = explode('|', $url); $var = []; foreach ($m2 as $key => $val) { @@ -1290,17 +1293,16 @@ class Route * @param string $pathinfo URL地址 * @param array $option 路由参数 * @param array $matches 匹配的变量 - * @param bool $merge 合并额外变量 * @return array */ - private static function parseRule($rule, $route, $pathinfo, $option = [], $matches = [], $merge = false) + private static function parseRule($rule, $route, $pathinfo, $option = [], $matches = []) { $request = Request::instance(); // 解析路由规则 if ($rule) { $rule = explode('/', $rule); // 获取URL地址中的参数 - $paths = $merge ? explode('|', $pathinfo, count($rule)) : explode('|', $pathinfo); + $paths = explode('|', $pathinfo); foreach ($rule as $item) { $fun = ''; if (0 === strpos($item, '[:')) {