phpCMS V9栏目伪静态的修改方法(支持自定义目录名),官方程序默认伪静态是不支持自定义栏目名的,所以今天就做了以下修改,让其支持!
首先看 urlrewrite 的规则,这个是 Apache 下的规则:
#栏目页
#RewriteRule ^([0-9A-Za-z_-]*)$ index.php?m=content&c=index&a=lists&catdir=$1
RewriteRule ^([0-9A-Za-z_-]*)/$ index.php?m=content&c=index&a=lists&catdir=$1
RewriteRule ^([0-9A-Za-z_-]*)/([0-9]+)$ index.php?m=content&c=index&a=lists&catdir=$1&page=$2
RewriteRule ^([0-9A-Za-z_-]*)/([0-9]+)/$ index.php?m=content&c=index&a=lists&catdir=$1&page=$2
#内容页
RewriteRule ^([0-9A-Za-z_-]*)/([0-9]+)\.html$ index.php?m=content&c=index&a=show&catdir=$1&id=$2
#标签列表
RewriteRule ^tag-(.*)-([0-9]+).html index.php?m=content&c=tag&a=lists&tag=$1&page=$2
这个是 IIS6 下的规则:
RewriteRule /phpcms/(.*)(.*)/ /phpcms/index\.php\?m=contentc=indexa=listscategorydir=$1catdir=$2
RewriteRule /phpcms/(.*)(.*)/([0-9]+)/ /phpcms/index\.php\?m=contentc=indexa=listscategorydir=$1catdir=$2page=$3
1.修改 index.php 文件
文件目录 phpcms\modules\content
找到“public function lists() {”,将以下代码:
$catid = $_GET['catid'] = intval($_GET['catid']);
替换成:
if(isset ($_GET['catid'])){
$catid = intval($_GET['catid']);
}else{
$catdir=$_GET['catdir'];
if($catdir==""){
$catdir=$_GET['categorydir'];
}
$s=$this->_getCategoryId($catdir);
$catid=$s[0][catid];
}
找到“public function show() {”,将以下代码:
$catid = intval($_GET['catid']);
替换成:
if(isset ($_GET['catid'])){
$catid = intval($_GET['catid']);
}else{
$catdir=$_GET['catdir'];
$s=$this->_getCategoryId($catdir);
$catid=$s[0][catid];
}
并且在最后的 }?> 前添加:
/**
*根据栏目名获得ID
* @param <type> $catdir
*/
function _getCategoryId($catdir){
$this->category_db = pc_base::load_model('category_model');
$result = $this->category_db->select(array('catdir'=>$catdir));
// print_r($result);
return $result;
}
2.修改 url.class.php 文件
文件目录 phpcms\modules\content\classes
找到“if (!$setting['ishtml']) {”,将以下代码:
$url = str_replace(array('{$catid}', '{$page}'), array($catid, $page), $urlrule);
if (strpos($url, '\\')!==false) {
$url = APP_PATH.str_replace('\\', '/', $url);
}
替换成:
$domain_dir = '';
if (strpos($category['url'], '://')!==false && strpos($category['url'], '?')===false) {
if (preg_match('/^((http|https):\/\/)?([^\/]+)/i', $category['url'], $matches)) {
$match_url = $matches[0];
$url = $match_url.'/';
}
$db = pc_base::load_model('category_model');
$r = $db->get_one(array('url'=>$url), '`catid`');
if($r) $domain_dir = $this->get_categorydir($r['catid']).$this->categorys[$r['catid']]['catdir'].'/';
}
$categorydir = $this->get_categorydir($catid);
$catdir = $category['catdir'];
$year = date('Y',$time);
$month = date('m',$time);
$day = date('d',$time);
//echo $catdir;
$urls = str_replace(array('{$categorydir}','{$catdir}','{$year}','{$month}','{$day}','{$catid}','{$id}','{$prefix}','{$page}'),array($categorydir,$catdir,$year,$month,$day,$catid,$id,$prefix,$page),$urlrule);
// echo $urls."<br>";
if (strpos($urls, '\\')!==false) {
$urls = APP_PATH.str_replace('\\', '/', $urls);
}
$url = $domain_dir.$urls;
3.后台URL规则中添加
url示例:newscenter/news/
url规则:{$categorydir}{$catdir}/|{$categorydir}{$catdir}/{$page}/
url示例:news/
url规则:{$catdir}/|{$catdir}/{$page}/
4.其他
a.更新栏目缓存
b.批量更新URL