t($mat['password']);//解密得到 cid_id preg_match("/^(\d+)\_(\d+)$/i", $newurl, $mat); if( isset($mat[2]) ) { $_GET['cid'] = $mat[1]; $_GET['id'] = $mat[2]; return true; } }elseif( isset($mat['alias']) ) { // {alias} preg_match("/^(\d+)\_(\d+)$/i", $mat['alias'], $mat2); //没有设置别名,将用 cid_id 组合 if( isset($mat2[2]) ) { $_GET['cid'] = $mat2[1]; $_GET['id'] = $mat2[2]; return true; } $row = $this->only_alias->get($mat['alias']); if(!empty($row)) { $_GET['cid'] = $row['cid']; $_GET['id'] = $row['id']; return true; } }elseif( isset($mat['hashids']) ) { // {hashids} $newurl = hashids_decrypt($mat['hashids']);//解密得到 cid id 数组 if(is_array($newurl) && isset($newurl[1])){ $_GET['cid'] = $newurl[0]; $_GET['id'] = $newurl[1]; return true; } } // 比如article/id.html,只能一个文章模型(多模型的不行,没法区分id属于那个模型的),因此丢到最后 if ( isset($mat['id']) && $this->integer_check($mat['id']) ){ $u_arr = explode('/', $uri); if( substr($cfg['link_show'], 0, strlen($u_arr[0])) == $u_arr[0] ){ $_GET['mid'] = 2; $_GET['id'] = $mat['id']; return true; } } } break; case 8: //HashIDS $newurl = hashids_decrypt($newurl);//解密得到 cid id 数组 if(is_array($newurl) && isset($newurl[1])){ $_GET['cid'] = $newurl[0]; $_GET['id'] = $newurl[1]; return true; } break; } unset($_GET['control']); unset($_GET['action']); return false; } //标签URL解析 protected function tag_url($cfg = array(), $uri = ''){ $len = strlen($cfg['link_tag_pre']); if(substr($uri, 0, $len) == $cfg['link_tag_pre']) { $len2 = strlen($cfg['link_tag_end']); if(substr($uri, -$len2) == $cfg['link_tag_end']) { $_GET['control'] = 'tag'; $_GET['action'] = 'index'; $newurl = substr($uri, $len, -$len2); $u_arr = explode('/', $newurl); $u_arr_count = count($u_arr); if($u_arr_count > 2){ core::error404(); } //分页 if( isset($u_arr[1]) ){ $page = $this->page_check($u_arr[1]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } switch ($cfg['link_tag_type']){ case 0: preg_match('/^(\d+)\_(.+)$/i', $u_arr[0], $mat); if( isset($mat[2]) ) { if( !$this->mid_check($mat[1], $cfg) ){core::error404();} $_GET['mid'] = $mat[1]; $_GET['name'] = $mat[2]; return true; }else{ $_GET['mid'] = 2; $_GET['name'] = $u_arr[0]; return true; } break; case 1: preg_match("/^(\d+)\_(\d+)$/i", $u_arr[0], $mat); if( isset($mat[2]) ) { if( !$this->mid_check($mat[1], $cfg) ){core::error404();} $_GET['mid'] = $mat[1]; $_GET['tagid'] = $mat[2]; return true; }elseif( $this->integer_check($u_arr[0]) ){ $_GET['mid'] = 2; $_GET['tagid'] = $u_arr[0]; return true; } break; case 2: $newurl = decrypt($u_arr[0]);//解密得到 mid_tagid preg_match("/^(\d+)\_(\d+)$/i", $newurl, $mat); if( isset($mat[2]) ){ if( !$this->mid_check($mat[1], $cfg) ){core::error404();} $_GET['mid'] = (int)$mat[1]; $_GET['tagid'] = (int)$mat[2]; return true; } break; case 3: $newurl = hashids_decrypt($u_arr[0]);//解密得到 mid tagid 数组 if(is_array($newurl) && isset($newurl[1])){ $_GET['mid'] = (int)$newurl[0]; $_GET['tagid'] = (int)$newurl[1]; return true; } break; } }else{ //尝试301跳转到带后缀的链接试试看~ http_location($cfg['weburl'].$uri.$cfg['link_tag_end'], '301'); } } unset($_GET['control']); unset($_GET['action']); return false; } //搜索URL解析 protected function search_url($cfg = array(), $uri = ''){ if(substr($uri, 0, 7) == 'search/') { if(substr($uri, -1) != '/'){$uri .= '/';} $newurl = substr($uri, 7, -1); $uarr = explode('/', $newurl); //模型ID if(isset($uarr[0]) && substr($uarr[0], 0 ,4) == 'mid_'){ $mid = substr($uarr[0], 4); if($this->mid_check($mid, $cfg)){ $_GET['mid'] = $mid; array_shift($uarr); }else{ core::error404(); } }else{ $_GET['mid'] = 2; } //排除多余的参数 if(count($uarr) > 2){core::error404();} //关键词 $_GET['keyword'] = $uarr[0]; //分页 if( isset($uarr[1]) ){ $page = $this->page_check($uarr[1]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } $_GET['control'] = 'search'; $_GET['action'] = 'index'; return true; } //搜索页面链接解析 $url_suffix = isset($_ENV['_config']['url_suffix']) ? $_ENV['_config']['url_suffix'] : '.html'; $url_suffix_len = strlen($url_suffix); if(substr($uri, -$url_suffix_len) == $url_suffix && substr($uri, 0, -$url_suffix_len) == 'so') { $_GET['control'] = 'search'; $_GET['action'] = 'so'; return true; } return false; } //评论URL解析 protected function comment_url($cfg = array(), $uri = ''){ $len = strlen($cfg['link_comment_pre']); if(substr($uri, 0, $len) == $cfg['link_comment_pre']) { $url_suffix = isset($_ENV['_config']['url_suffix']) ? $_ENV['_config']['url_suffix'] : '.html'; $url_suffix_len = strlen($url_suffix); if(substr($uri, -$url_suffix_len) == $url_suffix) { $newurl = substr($uri, $len, -$url_suffix_len); $u_arr = explode('_', $newurl); if(count($u_arr) > 1) { $_GET['control'] = 'comment'; $_GET['action'] = 'index'; $_GET['cid'] = $u_arr[0]; $_GET['id'] = $u_arr[1]; //分页 if(isset($u_arr[2])){ if($this->integer_check($u_arr[2])){ $_GET['page'] = $u_arr[2]; }else{ core::error404(); } } return true; } } } return false; } //首页分页URL解析 protected function index_page_url($cfg = array(), $uri = ''){ $url_suffix = isset($_ENV['_config']['url_suffix']) ? $_ENV['_config']['url_suffix'] : '.html'; $url_suffix_len = strlen($url_suffix); if(substr($uri, 0, 6) == 'index_' && substr($uri, -$url_suffix_len) == $url_suffix) { $newurl = substr($uri, 0, -$url_suffix_len); preg_match("/^index_(\d+)$/i", $newurl, $mat); if( isset($mat[1]) ){ if(!$this->integer_check($mat[1])){core::error404();} $_GET['control'] = 'index'; $_GET['action'] = 'index'; $_GET['mid'] = 2; $_GET['page'] = $mat[1]; return true; } preg_match("/^index_(\d+)_(\d+)$/i", $newurl, $mat); if( isset($mat[2]) ){ if(!$this->mid_check($mat[1], $cfg)){core::error404();} if(!$this->integer_check($mat[2])){core::error404();} $_GET['control'] = 'index'; $_GET['action'] = 'index'; $_GET['mid'] = $mat[1]; $_GET['page'] = $mat[2]; return true; } } return false; } //热门标签 全部标签 URL解析 protected function tag_like_url($cfg = array(), $uri = ''){ // 热门标签 if($uri == $cfg['link_tag_top'] || $uri == $cfg['link_tag_top'].'/') { if($uri == $cfg['link_tag_top']){ http_location($cfg['weburl'].$uri.'/', '301'); } $_GET['control'] = 'tag'; $_GET['action'] = 'top'; return true; } //全部标签 if(substr($uri, 0, 8) == 'tag_all/' || substr($uri, 0, 7) == 'tag_all'){ if(substr($uri, -1) != '/'){ http_location($cfg['weburl'].$uri.'/', '301'); } $u_arr = explode('/', $uri); if($u_arr[0] != 'tag_all'){ core::error404(); }else{ unset($u_arr); } $_GET['control'] = 'tag'; $_GET['action'] = 'all'; $newurl = substr($uri, 8, -1); if($newurl){ if(is_numeric($newurl) && $newurl > 0){ $_GET['mid'] = 2; $_GET['page'] = $newurl; }else{ $u_arr = explode('_', $newurl); if(count($u_arr) > 2){core::error404();} if(!$this->mid_check($u_arr[0], $cfg)){core::error404();} $_GET['mid'] = $u_arr[0]; if(is_numeric($u_arr[1]) && $u_arr[1] > 0){ $_GET['page'] = $u_arr[1]; }else{ core::error404(); } } } return true; } return false; } //用户中心URL解析 protected function user_url($cfg = array(), $uri = ''){ $url_suffix = isset($_ENV['_config']['url_suffix']) ? $_ENV['_config']['url_suffix'] : '.html'; $url_suffix_len = strlen($url_suffix); $newurl = substr($uri, 0, -$url_suffix_len); if( preg_match('/^user-[a-z0-9-]+$/i', $newurl) || preg_match('/^my-[a-z0-9-]+$/i', $newurl) ){ $u_arr = explode('-', $newurl); if(count($u_arr) > 1) { $_GET['control'] = $u_arr[0]; array_shift($u_arr); $_GET['action'] = $u_arr[0]; array_shift($u_arr); $num = count($u_arr); for($i=0; $i<$num; $i+=2){ isset($u_arr[$i+1]) && $_GET[$u_arr[$i]] = $u_arr[$i+1]; } return true; } } return false; } //属性内容URL解析 protected function flags_url($cfg = array(), $uri = ''){ if(substr($uri, 0, 6) == 'flags/'){ if(substr($uri, -1) == '/'){$uri = substr($uri, 0,-1);} $u_arr = explode('/', $uri); if( isset($u_arr[1]) ){ $_GET['control'] = 'flags'; $_GET['action'] = 'index'; $u_arr_1 = explode('_', $u_arr[1]); if(isset($u_arr_1[1])){ $_GET['mid'] = $u_arr_1[0]; if(!$this->mid_check($_GET['mid'], $cfg)){core::error404();} $_GET['flag'] = $u_arr_1[1]; }else{ $_GET['mid'] = 2; $_GET['flag'] = $u_arr[1]; } if(!isset($this->cms_content->flag_arr[$_GET['flag']])){core::error404();} //分页 if( isset($u_arr[2]) ){ $page = $this->page_check($u_arr[2]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } return true; } } return false; } //个人空间URL解析 protected function space_url($cfg = array(), $uri = ''){ $len = strlen($cfg['link_space_pre']); if(substr($uri, 0, $len) == $cfg['link_space_pre']) { $len2 = strlen($cfg['link_space_end']); if(substr($uri, -$len2) == $cfg['link_space_end']) { $newurl = substr($uri, $len, -$len2); $u_arr = explode('/', $newurl); if( $this->integer_check($u_arr[0]) ){ $_GET['control'] = 'space'; $_GET['action'] = 'index'; $_GET['uid'] = $u_arr[0]; //分页 if( isset($u_arr[1]) ){ $page = $this->page_check($u_arr[1]); if($page){ $_GET['page'] = $page; }else{ core::error404(); } } } } } return false; } //动态URL解析 protected function other_url(){ if(isset($_GET['u'])) { $u = $_GET['u']; unset($_GET['u']); }elseif(!empty($_SERVER['PATH_INFO'])) { $u = R('PATH_INFO', 'S'); }else{ $_GET = array(); $u = R('QUERY_STRING', 'S'); } //清除URL后缀 $url_suffix = C('url_suffix'); if($url_suffix) { $suf_len = strlen($url_suffix); if(substr($u, -($suf_len)) == $url_suffix) $u = substr($u, 0, -($suf_len)); } $uarr = explode('&', $u); $u = $uarr[0]; if(count($uarr) > 1){ array_shift($uarr); foreach ($uarr as $v){ $varr = explode('=', $v); $_GET[$varr[0]] = isset($varr[1]) ? urldecode($varr[1]) : ''; } } unset($uarr); $uarr = explode('-', $u); if(count($uarr) < 2) {core::error404();} //控制器 if(isset($uarr[0])) { $_GET['control'] = empty($uarr[0]) ? 'index': strtolower($uarr[0]); array_shift($uarr); } //方法 if(isset($uarr[0])) { $_GET['action'] = empty($uarr[0]) ? 'index': strtolower($uarr[0]); array_shift($uarr); } //伪静态下 访问动态首页、内容页URL、分类URL、标签URL 则进入404页面 $dis_control = array('index', 'show', 'cate', 'tag'); if( in_array($_GET['control'], $dis_control) && $_GET['action'] == 'index'){ core::error404(); } //参数 $num = count($uarr); for($i=0; $i<$num; $i+=2){ isset($uarr[$i+1]) && $_GET[$uarr[$i]] = $uarr[$i+1]; } return false; } //分页参数验证 private function page_check($param){ if(empty($param)){ return false; }else{ preg_match('/^page_([1-9]\d*)$/', $param, $mat); if(isset($mat[1])){ return $mat[1]; }else{ return false; } } } //正整数参数验证 private function integer_check($param){ if(empty($param)){ return false; }elseif( preg_match($this->integer_pattern, $param) ){ return true; }else{ return false; } } //模型ID验证(不含单页) private function mid_check($mid, $cfg){ if($mid > 1 && isset($cfg['table_arr'][$mid])){ return true; }else{ return false; } } } Lecms 3.0.3 错误

错误信息

错误位置

基本信息

程序流程

SQL

$_GET

$_POST

$_COOKIE

包含文件

其他信息