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

二级域名开启之后U方法跳转问题,下一页支持路由问题

Jun 07, 2016 am 11:42 AM

开启二级域名之后多分组跳转问题,域名绑定分组跳转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 =&gt; $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 =&gt; $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 =&gt; $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 =&gt; $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元

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Python プログラミングの入門コード例について学びます。 Python プログラミングの入門コード例について学びます。 Jan 04, 2024 am 10:50 AM

Python プログラミングの入門コード例について学びます。

PHP 変数の実際の使用: 10 の実際の使用例 PHP 変数の実際の使用: 10 の実際の使用例 Feb 19, 2024 pm 03:00 PM

PHP 変数の実際の使用: 10 の実際の使用例

PHPを使用して在庫管理システムに在庫管理機能コードを記述する方法 PHPを使用して在庫管理システムに在庫管理機能コードを記述する方法 Aug 06, 2023 pm 04:49 PM

PHPを使用して在庫管理システムに在庫管理機能コードを記述する方法

初心者から熟練者まで: Go 言語で一般的に使用されるデータ構造のコード実装 初心者から熟練者まで: Go 言語で一般的に使用されるデータ構造のコード実装 Mar 04, 2024 pm 03:09 PM

初心者から熟練者まで: Go 言語で一般的に使用されるデータ構造のコード実装

Java は単純なバブルソートコードを実装します Java は単純なバブルソートコードを実装します Jan 30, 2024 am 09:34 AM

Java は単純なバブルソートコードを実装します

Go 言語プログラミングの例: Web 開発のコード例 Go 言語プログラミングの例: Web 開発のコード例 Mar 04, 2024 pm 04:54 PM

Go 言語プログラミングの例: Web 開発のコード例

Huawei Cloud Edge Computing Interconnection Guide: インターフェースを迅速に実装するための Java コード例 Huawei Cloud Edge Computing Interconnection Guide: インターフェースを迅速に実装するための Java コード例 Jul 05, 2023 pm 09:57 PM

Huawei Cloud Edge Computing Interconnection Guide: インターフェースを迅速に実装するための Java コード例

ガイダンスと例: Java で選択ソート アルゴリズムを実装する方法を学習します。 ガイダンスと例: Java で選択ソート アルゴリズムを実装する方法を学習します。 Feb 18, 2024 am 10:52 AM

ガイダンスと例: Java で選択ソート アルゴリズムを実装する方法を学習します。

See all articles