tp自己的u函数太反人类了,把参数都伪静态,其实造成了极大的不兼容。很多cdn,rpc,浏览器,http协议,反向代理等应用会对此理解失误,具体的问题我说不上来,反正我觉得这种伪装成无数个文件的方法太煞笔了,文件就是文件,参数就是参数,把参数伪装成文件算是怎么回事啊!!!!太反人类了,完全不能忍
/**
* url组装 支持不同url模式
* @param string $url url表达式,格式:'[模块/控制器/操作#锚点@域名]?参数1=值1&参数2=值2...'
* @param string|array $vars 传入的参数,支持数组和字符串
* @param string $suffix 伪静态后缀,默认为true表示获取配置值
* @param boolean $domain 是否显示域名
* @return string
*/
function u($url='',$vars='',$suffix=true,$domain=false) {
// 解析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] = array_pop($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__.'?'.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__.'/'.rtrim($url,$depr);
}else{
$module = defined('bind_module') ? '' : $module;
$url = __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(!empty($vars)) {
$vars = http_build_query($vars);
$url .= '?'.$vars;
}
}
}
if(isset($anchor)){
$url .= '#'.$anchor;
}
if($domain) {
$url = (is_ssl()?'https://':'http://').$domain.$url;
}
return $url;
}
ad:真正免费,域名+虚机+企业邮箱=0元