search
Homephp教程php手册二级域名开启之后U方法跳转问题,下一页支持路由问题

开启二级域名之后多分组跳转问题,域名绑定分组跳转url改写,重写U函数在原函数判断子域名开启之前加如下代码,比如现在是admin.baidu.com 使用U('/Home/aa/bb')之后,直接跳到home.baidu.com/aa/bb.html
最近做项目遇到tp独立分组二级域名问题,解决之后跨域session解决,但是U方法从跳转的时候不能调到对应的分组的域名,和小伙伴改造一次U方法。并且今天顺手改了U开启路由之后下一页不支持路由的问题,技术有限,发现有问题请指正

跨域 在U方法第166行解析子域名之前直接加代码判断    /*<br>     * 开启子域名的时候修复url<br>     * 例如 www.a.com有分组Home,让home.a.com访问的时候U生成的地址home替换www,去掉Home/<br>     * modify author :赵利刚 王荣<br>     * modify time:2014.2.26<br>     */<br>     if(C('APP_SUB_DOMAIN_DEPLOY') == 1){<br>         foreach (C('APP_SUB_DOMAIN_RULES') as $key => $zlg) {            <br>             if(false !== strstr($url,$zlg[0])){                <br>                 $domain = $_SERVER['HTTP_HOST']; //获取主机域名<br>                 $domain = $key.strstr($domain,'.'); //替换当前域名为分组域名<br>                 $url = str_replace($zlg[0],'',$url); //去掉多余pathinfo里面的分组<br>             }            <br>         }<br>     }tp开启路由之后下一页路由失效问题 分页类URL组装 大约262行URL拼接完成之后增加代码            //dump($url);<br>             /*<br>             *tp开启路由之后下一页路由失效问题 分页类URL组装<br>             * modify author :赵利刚<br>             * modify time:2014.3.5<br>             */<br>             //如果开启路由<br>             if(C('URL_ROUTER_ON')){                <br>                 foreach (C('URL_ROUTE_RULES') as $zhaolg => $zlig){//遍历路由                        <br>                     if(strstr('/'.GROUP_NAME.$url,$zlig)){//从网址中找路由规则<br>                         $lg = strstr($zhaolg,'/:');//分析规则 带参数?<br>                         if($lg){//如果规则带参数                            <br>                             $tempzlg = str_replace('/:','',$lg);//取参数<br>                             //dump($tempzlg);  <br>                             if($tempzlg){<br>                                 if(C('APP_SUB_DOMAIN_DEPLOY')){<br>                                     $zlgurl = str_replace($zlig,$zhaolg,'/'.GROUP_NAME.$url); //url替换为路由规则 <br>                                 }else{<br>                                     $zlgurl = str_replace($zlig,$zhaolg,$url); //url替换为路由规则 <br>                                 }                                <br>                                 //注 /s/:c/c/4/p/__PAGE__<br>                                 //dump($zlgurl);<br>                                 $url = str_replace($lg.'/'.$tempzlg,'',$zlgurl);//url替换路由规则参数<br>                                                             <br>                             }    <br>                         }else{//分析规则  不带参数<br>                             if(C('APP_SUB_DOMAIN_DEPLOY')){<br>                                 $url = str_replace($zlig,$zhaolg,'/'.GROUP_NAME.$url);//url替换为路由规则<br>                             }else{<br>                                 $url = str_replace($zlig,$zhaolg,$url);//url替换为路由规则 <br>                             }                    <br> <br>                         }<br>                     }<br>                 }<br>             }改造之后我的U方法 仅供参考/**
 * URL组装 支持不同URL模式
 * @param string $url URL表达式,格式:'[分组/模块/操作#锚点@域名]?参数1=值1&参数2=值2...'
 * @param string|array $vars 传入的参数,支持数组和字符串
 * @param string $suffix 伪静态后缀,默认为true表示获取配置值
 * @param boolean $redirect 是否跳转,如果设置为true则表示跳转到该URL地址
 * @param boolean $domain 是否显示域名
 * @return string
 */
function U($url='',$vars='',$suffix=true,$redirect=false,$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);
    }
    
    /*<br>     * 开启子域名的时候修复url<br>     * 例如 www.a.com有分组Home,让home.a.com访问的时候U生成的地址home替换www,去掉Home/<br>     * modify author :赵利刚 王荣<br>     * modify time:2014.2.26<br>     */<br>     if(C('APP_SUB_DOMAIN_DEPLOY') == 1){<br>         foreach (C('APP_SUB_DOMAIN_RULES') as $key => $zlg) {            <br>             if(false !== strstr($url,$zlg[0])){                <br>                 $domain = $_SERVER['HTTP_HOST']; //获取主机域名<br>                 $domain = $key.strstr($domain,'.'); //替换当前域名为分组域名<br>                 $url = str_replace($zlg[0],'',$url); //去掉多余pathinfo里面的分组<br>             }            <br>         }<br>     }
    
    
    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) {
                if(false === strpos($key,'*') && 0=== strpos($url,$rule[0])) {
                    $domain = $key.strstr($domain,'.'); // 生成对应子域名
                    $url    =  substr_replace($url,'',0,strlen($rule[0]));
                    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');
    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();
            $var[C('VAR_ACTION')]       =   !empty($path)?array_pop($path):ACTION_NAME;
            $var[C('VAR_MODULE')]       =   !empty($path)?array_pop($path):MODULE_NAME;
            if($maps = C('URL_ACTION_MAP')) {
                if(isset($maps[strtolower($var[C('VAR_MODULE')])])) {
                    $maps    =   $maps[strtolower($var[C('VAR_MODULE')])];
                    if($action = array_search(strtolower($var[C('VAR_ACTION')]),$maps)){
                        $var[C('VAR_ACTION')] = $action;
                    }
                }
            }
            if($maps = C('URL_MODULE_MAP')) {
                if($module = array_search(strtolower($var[C('VAR_MODULE')]),$maps)){
                    $var[C('VAR_MODULE')] = $module;
                }
            }            
            if(C('URL_CASE_INSENSITIVE')) {
                $var[C('VAR_MODULE')]   =   parse_name($var[C('VAR_MODULE')]);
            }
            if(!C('APP_SUB_DOMAIN_DEPLOY') && C('APP_GROUP_LIST')) {
                if(!empty($path)) {
                    $group                  =   array_pop($path);
                    $var[C('VAR_GROUP')]    =   $group;
                }else{
                    if(GROUP_NAME != C('DEFAULT_GROUP')) {
                        $var[C('VAR_GROUP')]=   GROUP_NAME;
                    }
                }
                if(C('URL_CASE_INSENSITIVE') && isset($var[C('VAR_GROUP')])) {
                    $var[C('VAR_GROUP')]    =  strtolower($var[C('VAR_GROUP')]);
                }
            }
        }
    }

    if(C('URL_MODEL') == 0) { // 普通模式URL转换
        $url        =   __APP__.'?'.http_build_query(array_reverse($var));
        if(!empty($vars)) {
            $vars   =   urldecode(http_build_query($vars));
            $url   .=   '&'.$vars;
        }
    }else{ // PATHINFO模式或者兼容URL模式
        if(isset($route)) {
            $url    =   __APP__.'/'.rtrim($url,$depr);
        }else{
            $url    =   __APP__.'/'.implode($depr,array_reverse($var));
        }
        if(!empty($vars)) { // 添加参数
            foreach ($vars as $var => $val){
                if('' !== trim($val))   $url .= $depr . $var . $depr . urlencode($val);
            } 
            
            
            //dump($url);<br>             /*<br>             *tp开启路由之后下一页路由失效问题 分页类URL组装<br>             * modify author :赵利刚<br>             * modify time:2014.3.5<br>             */<br>             //如果开启路由<br>             if(C('URL_ROUTER_ON')){                <br>                 foreach (C('URL_ROUTE_RULES') as $zhaolg => $zlig){//遍历路由                        <br>                     if(strstr('/'.GROUP_NAME.$url,$zlig)){//从网址中找路由规则<br>                         $lg = strstr($zhaolg,'/:');//分析规则 带参数?<br>                         if($lg){//如果规则带参数                            <br>                             $tempzlg = str_replace('/:','',$lg);//取参数<br>                             //dump($tempzlg);  <br>                             if($tempzlg){<br>                                 if(C('APP_SUB_DOMAIN_DEPLOY')){<br>                                     $zlgurl = str_replace($zlig,$zhaolg,'/'.GROUP_NAME.$url); //url替换为路由规则 <br>                                 }else{<br>                                     $zlgurl = str_replace($zlig,$zhaolg,$url); //url替换为路由规则 <br>                                 }                                <br>                                 //注 /s/:c/c/4/p/__PAGE__<br>                                 //dump($zlgurl);<br>                                 $url = str_replace($lg.'/'.$tempzlg,'',$zlgurl);//url替换路由规则参数<br>                                                             <br>                             }    <br>                         }else{//分析规则  不带参数<br>                             if(C('APP_SUB_DOMAIN_DEPLOY')){<br>                                 $url = str_replace($zlig,$zhaolg,'/'.GROUP_NAME.$url);//url替换为路由规则<br>                             }else{<br>                                 $url = str_replace($zlig,$zhaolg,$url);//url替换为路由规则 <br>                             }                    <br> <br>                         }<br>                     }<br>                 }<br>             }
                         
        }
        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;
    }
    if($redirect) // 直接跳转URL
        redirect($url);
    else
        return $url;
}
跨域调用 比如现在是admin.baidu.com 使用U('/Home/aa/bb')之后,直接跳到home.baidu.com/aa/bb.html
分页调用 还和以前一样

AD:真正免费,域名+虚机+企业邮箱=0元

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

SublimeText3 English version

SublimeText3 English version

Recommended: Win version, supports code prompts!

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser is a secure browser environment for taking online exams securely. This software turns any computer into a secure workstation. It controls access to any utility and prevents students from using unauthorized resources.

SecLists

SecLists

SecLists is the ultimate security tester's companion. It is a collection of various types of lists that are frequently used during security assessments, all in one place. SecLists helps make security testing more efficient and productive by conveniently providing all the lists a security tester might need. List types include usernames, passwords, URLs, fuzzing payloads, sensitive data patterns, web shells, and more. The tester can simply pull this repository onto a new test machine and he will have access to every type of list he needs.

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

PhpStorm Mac version

PhpStorm Mac version

The latest (2018.2.1) professional PHP integrated development tool