phpwind的rewrite重写原理

没有深入过pw,被人问题这方面的问题,搜索了一下,发现了一篇博文,但原博客已打不开。

http://www.phpsoho.com/html/document/200608/1154750694.html

有人说过“phpwind“在技术是成功的,而dz在商业上成功的,在rewrite的控制中,pw做得远远比dz好。

 

官方默认的重写规则:

RewriteRule ^(.*)-htm-(.*)$ $1.php?$2

首先,我们分析他的构成。当我们打开 global.php 文件,找到 :

 

<?php
$db_obstart == 1 ? ob_start(‘ob_gzhandler‘) : ob_start();
?>

 

我们会发现,这个全局文件打开了一个ob_start,并且进行一些判断。这个是pw系统进行rewrite的一个关键。

然后我们再找到footer()函数:

phpwind的rewrite重写原理
]<?php
function footer(){
    global $db,$db_obstart,$db_footertime,$db_htmifopen,$P_S_T,$mtablewidth,$db_ceoconnect,$wind_version,$imgpath,$stylepath,$footer_ad,$db_union,$dbinfo,$timestamp;
    Update_ol();
    if($db){
        $qn=$db->query_num;
    }
    $ft_gzip=($db_obstart==1 ? "Gzip enabled" : "Gzip disabled").$db_union[3];
    if ($db_footertime == 1){
        $t_array    = explode(‘ ‘,microtime());
        $totaltime    = number_format(($t_array[0]+$t_array[1]-$P_S_T),6);
        $wind_spend    = "Total $totaltime(s) query $qn,";
    }
    $ft_time=get_date($timestamp,‘m-d H:i‘);
    include PrintEot(‘footer‘);
    $output = str_replace(array(‘<!--<!---->‘,‘<!---->‘),array(‘‘,‘‘),ob_get_contents());
    if($db_htmifopen){
        $output = preg_replace(
            "/<a(s*[^>]+s*)href=(["|‘]?)([^"‘>s]+.php?[^"‘>s]+)(["|‘]?)/ies",
            "Htm_cv(‘3‘,‘<a1href="‘)",
            $output
        );
    }
    ob_end_clean();
    $db_obstart == 1 ? ob_start(‘ob_gzhandler‘) : ob_start();
    echo $output;
    flush;
    exit;
}
?>
phpwind的rewrite重写原理

common.php中:

phpwind的rewrite重写原理
function parseHtmlUrlRewrite($html, $flag) {
    return $flag ? preg_replace("/\<a(\s*[^\>]+\s*)href\=([\"|\‘]?)((index|cate|thread|read|faq|rss)\.php\?[^\"\‘>\s]+\s?)[\"|\‘]?/ies", "Htm_cv(‘\\3‘,‘<a\\1href=\"‘)", $html) : $html;
}

/**
 * url处理
 *
 * @param string $url
 * @param string $tag
 * @return string
 */
function Htm_cv($url, $tag) {
    return stripslashes($tag) . urlRewrite($url) . ‘"‘;
}

function urlRewrite($url) {
    global $db_htmifopen, $db_dir, $db_ext;
    if (!$db_htmifopen) return $url;
    $tmppos = strpos($url, ‘#‘);
    $add = $tmppos !== false ? substr($url, $tmppos) : ‘‘;
    $turl = str_replace(array(‘.php?‘, ‘=‘, ‘&amp;‘, ‘&‘, $add), array($db_dir, ‘-‘, ‘-‘, ‘-‘, ‘‘), $url);
    $turl != $url && $turl .= $db_ext;
    return $turl . $add;
}
phpwind的rewrite重写原理

phpwind的rewrite重写原理

上一篇:win7 安装 memcached


下一篇:windows CMD 命令