From c4f2958231edf3f6a7850011900784dcee30e5b4 Mon Sep 17 00:00:00 2001 From: thinkphp Date: Mon, 11 Jan 2016 19:09:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=96=E6=B6=88=20=E8=B7=AF=E7=94=B1?= =?UTF-8?q?=E8=A7=84=E5=88=99=E5=AE=9A=E4=B9=89=E4=B8=AD=E7=9A=84=20\d=20?= =?UTF-8?q?=E7=94=A8=E6=B3=95=20=E4=BD=BF=E7=94=A8=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E8=A7=84=E5=88=99=E6=9B=BF=E4=BB=A3=20=E4=BF=AE=E6=AD=A3URL?= =?UTF-8?q?=E7=94=9F=E6=88=90=E7=9A=84=E4=B8=80=E5=A4=84=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- library/think/Route.php | 20 +++----------------- library/think/Url.php | 15 ++++++--------- 2 files changed, 9 insertions(+), 26 deletions(-) diff --git a/library/think/Route.php b/library/think/Route.php index 296bc58a..a542fc43 100644 --- a/library/think/Route.php +++ b/library/think/Route.php @@ -217,8 +217,6 @@ class Route } if (!empty($rule)) { // 子域名部署规则 - // '子域名'=>'模块[/控制器/操作]' - // '子域名'=>'模块[/控制器/操作]?var1=a&var2=b&var3=*'; if ($rule instanceof \Closure) { // 执行闭包 $reflect = new \ReflectionFunction($rule); @@ -453,7 +451,7 @@ class Route public static function parseUrl($url, $depr = '/') { if (isset(self::$bind['module'])) { - // 如果有模块/控制器绑定 针对路由到 模块/控制器 有效 + // 如果有模块/控制器绑定 $url = self::$bind['module'] . '/' . $url; } // 分隔符替换 确保路由定义使用统一的分隔符 @@ -523,15 +521,7 @@ class Route } if (0 === strpos($val, ':')) { // URL变量 - if (strpos($val, '\\')) { - $type = substr($val, -1); - if ('d' == $type && !is_numeric($m1[$key])) { - return false; - } - $name = substr($val, 1, -2); - } else { - $name = substr($val, 1); - } + $name = substr($val, 1); if (isset($m1[$key]) && isset($pattern[$name]) && !preg_match('/^' . $pattern[$name] . '$/', $m1[$key])) { // 检查变量规则 return false; @@ -561,11 +551,7 @@ class Route $item = substr($item, 1, -1); } if (0 === strpos($item, ':')) { - if (strpos($item, '\\')) { - $var = substr($item, 1, -2); - } else { - $var = substr($item, 1); - } + $var = substr($item, 1); $matches[$var] = array_shift($paths); } else { // 过滤URL中的静态变量 diff --git a/library/think/Url.php b/library/think/Url.php index 3dd54458..3fc26ecc 100644 --- a/library/think/Url.php +++ b/library/think/Url.php @@ -30,8 +30,6 @@ class Url if (is_string($vars)) { // aaa=1&bbb=2 转换成数组 parse_str($vars, $vars); - } elseif (!is_array($vars)) { - $vars = []; } if (strpos($url, '?')) { @@ -42,8 +40,8 @@ class Url // 检测路由 if ($match = self::getRouteUrl($url, $vars)) { - // 处理路由规则中的特殊内容 - $url = str_replace(['\\d', '$'], '', $match); + // 处理路由规则中的特殊字符 + $url = str_replace('[--think--]', '', $match); } else { // 路由不存在 直接解析 $url = self::parseUrl($url); @@ -161,11 +159,7 @@ class Url } if (0 === strpos($val, ':')) { // URL变量 - if (strpos($val, '\\')) { - $name = substr($val, 1, -2); - } else { - $name = substr($val, 1); - } + $name = substr($val, 1); if (!$optional && !isset($vars[$name])) { // 变量未设置 return false; @@ -208,6 +202,9 @@ class Url if (!empty($alias[$name])) { foreach ($alias[$name] as $key => $url) { // 检查变量匹配 + if (strpos($url, '$')) { + $url = str_replace('$', '[--think--]', $url); + } if (self::pattern($url, $vars, $check)) { foreach ($vars as $key => $val) { if (false !== strpos($url, '[:' . $key . ']')) {