Ejemplo n.º 1
0
function url_ext()
{
    $rewrite_rules = cpConfig::get('URL_REWRITE_RULE');
    if (!empty($rewrite_rules)) {
        if (($pos = strpos($_SERVER['REQUEST_URI'], '?')) !== false) {
            parse_str(substr($_SERVER['REQUEST_URI'], $pos + 1), $_GET);
        }
        $rewrite_rules['<m>/<a>'] = '<m>/<a>';
        foreach ($rewrite_rules as $rule => $mapper) {
            if (0 !== stripos($rule, 'http://')) {
                $rule = 'http://' . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER["SCRIPT_NAME"]), '/\\') . '/' . $rule;
            }
            $rule = '/' . str_ireplace(array('\\\\', 'http://', '/', '<', '>', '.'), array('', '', '\\/', '(?<', '>\\w+)', '\\.'), $rule) . '/i';
            if (preg_match($rule, 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], $matchs)) {
                foreach ($matchs as $matchkey => $matchval) {
                    if ('c' === $matchkey) {
                        $mapper = str_ireplace('<m>', $matchval, $mapper);
                    } elseif ('a' === $matchkey) {
                        $mapper = str_ireplace('<a>', $matchval, $mapper);
                    } else {
                        if (!is_int($matchkey)) {
                            $_GET[$matchkey] = $matchval;
                        }
                    }
                }
                list(cpApp::$module, cpApp::$action) = explode('/', $mapper);
                break;
            }
        }
    } else {
        cpApp::$module = $_GET['m'];
        cpApp::$action = $_GET['a'];
    }
}
Ejemplo n.º 2
0
 private function _parseUrl()
 {
     $script_name = $_SERVER["SCRIPT_NAME"];
     //获取当前文件的路径
     $url = $_SERVER["REQUEST_URI"];
     //获取完整的路径,包含"?"之后的字符串
     //去除url包含的当前文件的路径信息
     if ($url && @strpos($url, $script_name, 0) !== false) {
         $url = substr($url, strlen($script_name));
     } else {
         $script_name = str_replace(basename($_SERVER["SCRIPT_NAME"]), '', $_SERVER["SCRIPT_NAME"]);
         if ($url && @strpos($url, $script_name, 0) !== false) {
             $url = substr($url, strlen($script_name));
         }
     }
     //第一个字符是'/',则去掉
     if ($url[0] == '/') {
         $url = substr($url, 1);
     }
     //去除问号后面的查询字符串
     if ($url && false !== ($pos = @strrpos($url, '?'))) {
         $url = substr($url, 0, $pos);
     }
     //去除后缀
     if ($url && ($pos = strrpos($url, $this->appConfig['URL_HTML_SUFFIX'])) > 0) {
         $url = substr($url, 0, $pos);
     }
     $flag = 0;
     //获取模块名称
     if ($url && ($pos = @strpos($url, $this->appConfig['URL_MODULE_DEPR'], 1)) > 0) {
         self::$module = substr($url, 0, $pos);
         //模块
         $url = substr($url, $pos + 1);
         //除去模块名称,剩下的url字符串
         $flag = 1;
         //标志可以正常查找到模块
     } else {
         //如果找不到模块分隔符,以当前网址为模块名
         self::$module = $url;
     }
     $flag2 = 0;
     //用来表示是否需要解析参数
     //获取操作方法名称
     if ($url && ($pos = @strpos($url, $this->appConfig['URL_ACTION_DEPR'], 1)) > 0) {
         self::$action = substr($url, 0, $pos);
         //模块
         $url = substr($url, $pos + 1);
         $flag2 = 1;
         //表示需要解析参数
     } else {
         //只有可以正常查找到模块之后,才能把剩余的当作操作来处理
         //因为不能找不到模块,已经把剩下的网址当作模块处理了
         if ($flag) {
             self::$action = $url;
         }
     }
     //解析参数
     if ($flag2) {
         $param = explode($this->appConfig['URL_PARAM_DEPR'], $url);
         $param_count = count($param);
         for ($i = 0; $i < $param_count; $i = $i + 2) {
             $_GET[$i] = $param[$i];
             if (isset($param[$i + 1])) {
                 if (!is_numeric($param[$i])) {
                     $_GET[$param[$i]] = $param[$i + 1];
                 }
                 $_GET[$i + 1] = $param[$i + 1];
             }
         }
     }
 }
Ejemplo n.º 3
0
<?php

//定义CanPHP框架目录
define('CP_PATH', dirname(__FILE__) . '/include/');
//注意目录后面加“/”
require dirname(__FILE__) . '/config.php';
//加载配置
require CP_PATH . 'core/cpApp.class.php';
//加载应用控制类
require CP_PATH . 'core/cpModel.class.php';
//加载数据库模型类
require CP_PATH . 'core/cpTemplate.class.php';
//加载模板类
$app = new cpApp($config);
//实例化单一入口应用控制类
//执行项目
$app->run();