Phpcms v9 列表页、内容页目录式(拼音格式)伪静态
伪静态对于网站来说还是很必要做的,网站做了伪静态相比直接生成静态要大大减轻服务器的运行压力,同时又利于SEO搜索引擎优化,所以说在建站测试时就应该把伪静态这一环节考虑周全。Phpcms v9默认是不支持列表页、内容页目录式的伪静态。默认的伪静态列表页的是list-1-1.html,内容页的是show-1-2-1.html,这样的Url样式对于很多站长来说看着不是那么的舒服,也不利于SEO优化,那么下面就是本次本地测试的Phpcms v9 列表页、内容页目录式(拼音格式)伪静态案例。
本次实现Phpcms v9 列表页、内容页目录式(拼音格式)伪静态的Url实例:
列表页:目录拼音.html|目录拼音-分页id.html
内容页:目录拼音/文章id.html|目录拼音/文章id-文章分页id.html
实现Phpcms v9 列表页、内容页目录式(拼音格式)伪静态步骤:
打开 phpcms\modules\content\classes\url.class.php,找到:
$url = str_replace(array('{$catid}', '{$page}'), array($catid, $page), $urlrule);
替换为:
$category_dir = $this->get_categorydir($catid);
$url = str_replace(array('{$catid}', '{$page}','{$catdir}','{$categorydir}'), array($catid, $page,$category['catdir'],$category_dir), $urlrule);
让list列表页面支持目录式访问网站:
打开phpcms\modules\content\index.php,找到:
$catid = $_GET['catid'] = intval($_GET['catid']);
替换为:
if(isset ($_GET['catid'])){
$catid = $_GET['catid'] = intval($_GET['catid']);
} else{
$catid=$this->_getCategoryId($_GET['catdir']);
}
在该文件末尾的}?>前面加上以下代码:
private function _getCategoryId($catdir){
if(!strpos($catdir,'/')) {
$dirname = $catdir;
} else{
$dirname = end(explode('/',$catdir));
}
$this->category_db = pc_base::load_model('category_model');
$result = $this->category_db->get_one(array('catdir'=>$dirname));
return $result['catid'];
}
让show文章内容页面支持目录式访问网站:
打开phpcms\modules\content\index.php找到以下代码:
$catid = intval($_GET['catid']);
$id = intval($_GET['id']);
替换为以下代码:
if(isset ($_GET['catid'])){
$catid = intval($_GET['catid']);
} else{
$catid=$this->_getCategoryId($_GET['catdir']);
}
if(isset($_GET['id'])){
$id = intval($_GET['id']);
} else{
$id = $this->_getPrefixId($_GET['catdir'],$_GET['prefix']);
}
再在该文件底部( }?> 前)增加一个方法:
private function _getPrefixId($catdir,$prefix){
if(!strpos($catdir,'/')) {
$dirname = $catdir;
} else{
$dirname = end(explode('/',$catdir));
}
$this->category_db = pc_base::load_model('category_model');
$result = $this->category_db->get_one(array('catdir'=>$dirname));
$catid = $result['catid']; $siteids = getcache('category_content','commons');
$siteid = $siteids[$catid]; $CATEGORYS = getcache('category_content_'.$siteid,'commons');
if(!isset($CATEGORYS[$catid]) || $CATEGORYS[$catid]['type']!=0) showmessage(L('information_does_not_exist'),'blank');
$this->category = $CAT = $CATEGORYS[$catid];
$this->category_setting = $CAT['setting'] = string2array($this->category['setting']);
$siteid = $GLOBALS['siteid'] = $CAT['siteid'];
$MODEL = getcache('model','commons');
$modelid = $CAT['modelid'];
$tablename = $this->db->table_name = $this->db->db_tablepre.$MODEL[$modelid]['tablename'];
$result = $this->db->get_one(array('prefix'=>$prefix));
if(empty($result)){ $result = $this->db->get_one(array('id'=>$prefix)); } return $result['id'];
}
以上修改方案参考:https://blog.csdn.net/wuxiang668/article/details/78569788
网站后台开始配置伪静态:
网站后台->扩展->URL规则管理->添加规则:
列表页:
url实例:dir.html|dir-1.html
URL规则:{$catdir}.html|{$catdir}-{$page}.html
内容页:
url实例:catdir/id.html
URL规则:{$catdir}/{$id}.html|{$catdir}/{$id}-{$page}.html
后台URL规则设置完毕,接下来直接设置伪静态环境就OK了。
服务器配置伪静态规则:
以下是Apache环境下的伪静态规则,如果是IIS,Nginx服务器环境,可以自己进行转换后再使用。
RewriteEngine On
RewriteRule ^index.html index.php
RewriteRule ^(\w+)/(\d+)(\-(\d+))?\.html index.php?m=content&c=index&a=show&catdir=$1&id=$2&page=$4
RewriteRule ^((\w+)(\-(\d+))?)\.html index.php?m=content&c=index&a=lists&catdir=$2&page=$4
RewriteRule ^(.*)_([0-9]+).html index.php?m=content&c=tag&a=lists&tag=$1&page=$2
重启服务器,后台中在内容模块里的发布管理中对URL进行生成,最后更新缓存,OK!顺利完成Phpcms v9 列表页、内容页目录式(拼音格式)伪静态。如果,之前有测试过其他样式的伪静态,如果完成以上步骤后还未生成Phpcms v9 列表页、内容页目录式(拼音格式)伪静态的样式,可在管理栏目模块对栏目缓存进行更新,再次对所有URL进行生成,最后再更新全站缓存就OK了!