• destoon自定义文件的伪静态地址优化


    destoon自定义文件的伪静态优化

    destoon给出了一个自定义文件传参的方式

    在/include/global.func.php 有个rewirte函数来处理

    目前的处理方式:index.php?catid=0&areaid=0&z=0的伪静态处理结果为

    index-htm-catid-0-areaid-0-z-0.html

    但是这种格式不是特别好,因为如果值为0或者值为空的时候, 表示值不存在,如果是多重条件的组合,会生成一长串空值地址:

    我现在增加一个方法

    把类似这样的长网址search-htm-areaid-1-catid-0-order-0-kw-.html简化成search-htm-areaid-1.html

    rewrite是原方法,在方法体中增加一个getUrlKeyValue($url)来处理
    function rewrite($url, $encode = 0) {
        if(!RE_WRITE) return $url;
        if(RE_WRITE == 1 && strpos($url, 'search.php') !== false) return $url;
        if(strpos($url, '.php?') === false || strpos($url, '=') === false) return $url;
        $url= getUrlKeyValue($url);//这里增加一个过滤方法解决值为空或0的问题
        $url = str_replace(array('+', '-'), array('%20', '%20'), $url);
        $url = str_replace(array('.php?', '&', '='), array('-htm-', '-', '-'), $url).'.html';
        return $url;
    }
    function getUrlKeyValue($url)
    {
        $result = '';
        $mr     = preg_match_all('/(?|&)(.+?)=([^&?]*)/i', $url, $matchs);
        if ($mr !== false) {
            for ($i = 0; $i < $mr; $i++) {
                if($matchs[3][$i]) {
                    $result.=$matchs[2][$i].'='.$matchs[3][$i].'&';
                }
            }
        }
        $rootStr = substr($url,0,strpos($url, '.php?')+5);
        $result = $rootStr.rtrim($result,'&');
        return $result;
    }

    服务端htaccess对地址的接收:

    RewriteRule ^(.*)-htm-(.*)$ $1.php?$2
    $DT_QST = addslashes($_SERVER['QUERY_STRING']);

    然后rewirte.inc.php文件对query_string做接收处理

    defined('IN_DESTOON') or exit('Access Denied');
    $pstr = '';
    if(isset($_SERVER['UNENCODED_URL']) && strpos($_SERVER['QUERY_STRING'], '-htm-') !== false) $_SERVER['QUERY_STRING'] = substr($_SERVER['UNENCODED_URL'], strpos($_SERVER['UNENCODED_URL'], '-htm-') + 5);//IIS7+
    if($_SERVER['QUERY_STRING']) {
        if(preg_match("/^(.*).html(?(.*))*$/", $_SERVER['QUERY_STRING'], $_match)) {
            $pstr = $_match[1];
        } else if(preg_match("/^(.*)/$/", $_SERVER['QUERY_STRING'], $_match)) {
            $pstr = $_match[1];
        }
    } else if($_SERVER["REQUEST_URI"] != $_SERVER["SCRIPT_NAME"]) {
        $string = str_replace($_SERVER["SCRIPT_NAME"], '', $_SERVER["REQUEST_URI"]);
        if($string && preg_match("/^/(.*)/$/", $string, $_match)) $pstr = $_match[1];
    }
    
    if($pstr && strpos($pstr, '-') !== false) {
        $_GET = array();
        $pstr = explode('-', $pstr);
        $pstr_count = count($pstr);
        if($pstr_count%2 == 1) --$pstr_count;
        for($i = 0; $i < $pstr_count; $i++) { $_GET[$pstr[$i]] = $MQG ? addslashes($pstr[++$i]) : $pstr[++$i]; }
    }
    ?>


  • 相关阅读:
    Beginning iOS 8 Programming with Swift-TableView
    the-swift-programming-language 学习笔记
    Sharepoint 查阅项字段和计算值字段的定义
    java
    【转载】大型网站架构系列:消息队列(二)
    【转载】大型网站架构系列:分布式消息队列(一)
    【转载】高并发的核心技术-幂等的实现方案
    win2003 64位系统下ODBC连接使用
    PL/SQL Developer连接本地Oracle 11g 64位数据库
    Repeater 创建复杂表头的表格
  • 原文地址:https://www.cnblogs.com/keleyu/p/11757428.html
Copyright © 2020-2023  润新知