例如 index.php
利用 U 方法跳轉到 user.php 中,默認是不可以的
但是,使用了本方法就完全解決了此問題
用法
關鍵在 U函數的第一個參數,可以使用數組形式也可以是字符串形式共兩種方法處理。
例如
我想在 index.php?m=Home&c=Index&a=index 頁面
跳轉到 admin.php?m=Site&c=Public&a=login 頁面
第一個方法 字符串形式:
U('admin.php?Site/Public/login');
=>
admin.php?m=Site&c=Public&a=login ;
只要第一個參數前面增加 一個 ? 做間隔即可。但是切記 這個入口必須 .php結尾 ? 後面與 TP 一樣設置即可
第二個方法 字符串形式:
U(array('admin.php','Site/Public/login'));
=>
admin.php?m=Site&c=Public&a=login;
** URL_MODEL = 0, 1 均有效 。 2,3 比作改變 以 PATHINFO 樣式 ***
\ThinkPHP\Common\functions.php 打開系統函數庫文档
搜索function U函數所在位置
把U函數 替換成下面我已經編輯好的函數
function U($url='',$vars='',$suffix=true,$domain=false) { $__APP__ = ''; if(is_array($url)){ $__APP__ = C('URL_PATHINFO_DEPR').$url[0]; $url = $url[1]; }elseif(strpos($url,'?') && strpos($url,'.php')){ $url_var = explode('?',$url, 2); $__APP__ = C('URL_PATHINFO_DEPR').$url_var['0']; $url = $url_var['1']; } // 解析URL $info = parse_url($url); $url = !empty($info['path'])?$info['path']:ACTION_NAME; if(isset($info['fragment'])) { // 解析錨點 $anchor = $info['fragment']; if(false !== strpos($anchor,'?')) { // 解析參數 list($anchor,$info['query']) = explode('?',$anchor,2); } if(false !== strpos($anchor,'@')) { // 解析域名 list($anchor,$host) = explode('@',$anchor, 2); } }elseif(false !== strpos($url,'@')) { // 解析域名 list($url,$host) = explode('@',$info['path'], 2); } // 解析子域名 if(isset($host)) { $domain = $host.(strpos($host,'.')?'':strstr($_SERVER['HTTP_HOST'],'.')); }elseif($domain===true){ $domain = $_SERVER['HTTP_HOST']; if(C('APP_SUB_DOMAIN_DEPLOY') ) { // 開啓子域名部署 $domain = $domain=='localhost'?'localhost':'www'.strstr($_SERVER['HTTP_HOST'],'.'); // '子域名'=>array('模塊[/控制器]'); foreach (C('APP_SUB_DOMAIN_RULES') as $key => $rule) { $rule = is_array($rule)?$rule[0]:$rule; if(false === strpos($key,'*') && 0=== strpos($url,$rule)) { $domain = $key.strstr($domain,'.'); // 生成對應子域名 $url = substr_replace($url,'',0,strlen($rule)); break; } } } } // 解析參數 if(is_string($vars)) { // aaa=1&bbb=2 轉換成數組 parse_str($vars,$vars); }elseif(!is_array($vars)){ $vars = array(); } if(isset($info['query'])) { // 解析地址裡面參數 合並到vars parse_str($info['query'],$params); $vars = array_merge($params,$vars); } // URL組裝 $depr = C('URL_PATHINFO_DEPR'); $urlCase = C('URL_CASE_INSENSITIVE'); if($url) { if(0=== strpos($url,'/')) {// 定義路由 $route = true; $url = substr($url,1); if('/' != $depr) { $url = str_replace('/',$depr,$url); } }else{ if('/' != $depr) { // 安全替換 $url = str_replace('/',$depr,$url); } // 解析模塊、控制器和操作 $url = trim($url,$depr); $path = explode($depr,$url); $var = array(); $varModule = C('VAR_MODULE'); $varController = C('VAR_CONTROLLER'); $varAction = C('VAR_ACTION'); $var[$varAction] = !empty($path)?array_pop($path):ACTION_NAME; $var[$varController] = !empty($path)?array_pop($path):CONTROLLER_NAME; if($maps = C('URL_ACTION_MAP')) { if(isset($maps[strtolower($var[$varController])])) { $maps = $maps[strtolower($var[$varController])]; if($action = array_search(strtolower($var[$varAction]),$maps)){ $var[$varAction] = $action; } } } if($maps = C('URL_CONTROLLER_MAP')) { if($controller = array_search(strtolower($var[$varController]),$maps)){ $var[$varController] = $controller; } } if($urlCase) { $var[$varController] = parse_name($var[$varController]); } $module = ''; if(!empty($path)) { $var[$varModule] = implode($depr,$path); }else{ if(C('MULTI_MODULE')) { if(MODULE_NAME != C('DEFAULT_MODULE') || !C('MODULE_ALLOW_LIST')){ $var[$varModule]= MODULE_NAME; } } } if($maps = C('URL_MODULE_MAP')) { if($_module = array_search(strtolower($var[$varModule]),$maps)){ $var[$varModule] = $_module; } } if(isset($var[$varModule])){ $module = $var[$varModule]; unset($var[$varModule]); } } } if(C('URL_MODEL') == 0) { // 普通模式URL轉換 $url = ( $__APP__ ? $__APP__ : __APP__ ) .'?'.C('VAR_MODULE')."={$module}&".http_build_query(array_reverse($var)); if($urlCase){ $url = strtolower($url); } if(!empty($vars)) { $vars = http_build_query($vars); $url .= '&'.$vars; } }else{ // PATHINFO模式或者兼容URL模式 if(isset($route)) { $url = ( $__APP__ ? $__APP__ : __APP__ ) .'/'.rtrim($url,$depr); }else{ $module = (defined('BIND_MODULE') && BIND_MODULE==$module )? '' : $module; $url = ( $__APP__ ? $__APP__ : __APP__ ) .'/'.($module?$module.MODULE_PATHINFO_DEPR:'').implode($depr,array_reverse($var)); } if($urlCase){ $url = strtolower($url); } if(!empty($vars)) { // 添加參數 foreach ($vars as $var => $val){ if('' !== trim($val)) $url .= $depr . $var . $depr . urlencode($val); } } if($suffix) { $suffix = $suffix===true?C('URL_HTML_SUFFIX'):$suffix; if($pos = strpos($suffix, '|')){ $suffix = substr($suffix, 0, $pos); } if($suffix && '/' != substr($url,-1)){ $url .= '.'.ltrim($suffix,'.'); } } } if(isset($anchor)){ $url .= '#'.$anchor; } if($domain) { $url = (is_ssl()?'https://':'http://').$domain.$url; } return $url; }