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了!