列表頁:https://caifuziyou.net/ziyuan/

內容頁:https://caifuziyou.net/ziyuan/phome-rewrite.html

一、e/class/connect.php

1、內容頁偽靜態修改

//返回內容偽靜態
function eReturnRewriteInfoUrl($classid,$id,$ecms=0,$tempid=0){
	global $empire,$dbtbpre,$public_r,$class_r;//新增$empire,$dbtbpre,
	$classid=(int)$classid;
	$id=(int)$id;
	$tempid=(int)$tempid;
	$classpath=$class_r[$classid]['classpath'];
	$fn=$empire->fetch1("select filename from {$dbtbpre}ecms_".$class_r[$classid]['tbname']." where classid='$classid' and id='$id'");//filename
	if(empty($public_r['rewriteinfo'])||$tempid)
	{
		$r['pageurl']=$public_r['newsurl'].$classpath.'/'.$fn['filename'].'.html';
		$r['rewrite']=0;
	}
	else
	{
		if($ecms==1)
		{
			$r['pageurl']=$public_r['newsurl'].str_replace(array('[!--classid--]','[!--id--]','[!--page--]'),array($classid,$id,0),$public_r['rewriteinfo']);
		}
		else
		{
			$r['pageurl']=$public_r['newsurl'].str_replace(array('[!--classid--]','[!--id--]'),array($classid,$id),$public_r['rewriteinfo']);
		}
		$r['rewrite']=1;
	}
	return $r;
}

……

//返回標題連結(動態)
function sys_ReturnBqTitleLinkDt($r){
	global $public_r,$class_r;
	if(empty($r['isurl']))
	{
/*內容頁classpath/filename偽靜態註釋掉
		if($class_r[$r['classid']]['showdt']==1)//動態生成
		{
			$titleurl=$public_r['newsurl']."e/action/ShowInfo/?classid=".$r['classid']."&id=".$r['id'];
			return $titleurl;
		}
		elseif($class_r[$r['classid']]['showdt']==2)
		{
			$rewriter=eReturnRewriteInfoUrl($r['classid'],$r['id'],1);
			$titleurl=$rewriter['pageurl'];
			return $titleurl;
		}
內容頁classpath/filename偽靜態註釋掉*/
		if($class_r[$r['classid']]['filename']==3)
		{
			$filename=ReturnInfoSPath($r['filename']);
		}
		else
		{
			$filetype=$r['groupid']?'.php':$class_r[$r['classid']]['filetype'];
			$filename=$r['filename'].$filetype;
		}
		$iclasspath=ReturnSaveInfoPath($r['classid'],$r['id']);
		$newspath=empty($r['newspath'])?'':$r['newspath']."/";
		if($class_r[$r['classid']]['classurl']&&$class_r[$r['classid']]['ipath']=='')//域名
		{
			$titleurl=$class_r[$r['classid']]['classurl']."/".$newspath.$filename;
		}
		else
		{
			$titleurl=$public_r['newsurl'].$iclasspath.$newspath.$filename;
		}
	}
	else
	{
		$titleurl=$r['titleurl'];
	}
	return addslashes($titleurl);
}

2、欄目列表偽靜態修改

//返回欄目列表偽靜態
function eReturnRewriteClassUrl($classid,$ecms=0,$page=0,$tempid=0){//新增$page=0,
	global $empire,$dbtbpre,$public_r;//新增$empire,$dbtbpre,
	$classid=(int)$classid;
	$page=(int)$page;//新增$page
	$tempid=(int)$tempid;
	$cp=$empire->fetch1("select classpath from {$dbtbpre}enewsclass where classid='$classid'");//獲取classpath
	if(empty($public_r['rewriteclass'])||$tempid)
	{
		if (empty($page) || $page <= 1) {
			$r['pageurl']=$public_r['newsurl'].$cp['classpath'].'/';//預設欄目連結url不帶page
		} else {
			$r['pageurl']=$public_r['newsurl'].$cp['classpath'].'/page_'.$page.'/';//頁碼>1時,url帶page
		}
		$r['rewrite']=0;
	}
	else
	{
		if($ecms==1)
		{
			$r['pageurl']=$public_r['newsurl'].str_replace(array('[!--classid--]','[!--page--]'),array($classid,0),$public_r['rewriteclass']);
		}
		else
		{
			$r['pageurl']=$public_r['newsurl'].str_replace('[!--classid--]',$classid,$public_r['rewriteclass']);
		}
		$r['rewrite']=1;
	}
	return $r;
}

二、e/action/ListInfo/ShowInfo.php

$id=(int)$_GET['id'];
$page=(int)$_GET['page'];
$chtempid=(int)$_GET['tempid'];
$classpath=$_GET['classpath']; //獲取classpath
$filename=$_GET['filename']; //獲取filename
if(empty($classid))
{
	$cr = $empire->fetch1("SELECT classid FROM {$dbtbpre}enewsclass WHERE classpath='$classpath' LIMIT 1");
	if (!$cr) {
		db_close();
		$empire = null;
		http_response_code(404);
		exit('Class not found');
	}
	$classid=$cr['classid'];//利用classpath查詢classid
}
if(empty($id))
{
	$cr = $empire->fetch1("SELECT id FROM {$dbtbpre}ecms_".$class_r[$classid]['tbname']." WHERE classid='$classid' and filename='$filename' LIMIT 1");
	if (!$cr) {
		db_close();
		$empire = null;
		http_response_code(404);
		exit('Id not found');
	}
	$id=$cr['id'];//利用filename查詢id
}

三、e/action/ListInfo/index.php

$classid=(int)$_GET['classid'];
$chtempid=(int)$_GET['tempid'];
$chctempid=(int)$_GET['ctempid'];
$classpath=$_GET['classpath']; //獲取classpath
if(empty($classid))
{
	$cr = $empire->fetch1("SELECT classid FROM {$dbtbpre}enewsclass WHERE classpath='$classpath' LIMIT 1");
	if (!$cr) {
		db_close();
		$empire = null;
		http_response_code(404);
		exit('Class not found');
	}
	$classid=$cr['classid'];//利用classpath查詢classid
}

四、Nginx偽靜態

# 文章內容頁
rewrite ^/(fenxi|celue|anli|licai|tools|ziyuan|rumen|about)/([a-zA-Z0-9_-]+).html$ /e/action/ShowInfo.php?classpath=$1&filename=$2 last;
# 欄目列表分頁:/classpath/page_1/
rewrite ^/(fenxi|celue|anli|licai|tools|ziyuan|rumen|about)/page_(\d+)/?$ /e/action/ListInfo/index.php?classpath=$1&page=$2 last;
# 欄目列表首頁:/classpath/
rewrite ^/(fenxi|celue|anli|licai|tools|ziyuan|rumen|about)/?$ /e/action/ListInfo/index.php?classpath=$1&page=0 last;

五、快取最佳化

帝國CMS開啟偽靜態後,需要設定動態頁快取,以應對大資料與高併發的網站應用環境。

除了本地化的快取方式之外,還可以通過啟用Redis,最佳化模板、使用CDN等方式來更好的減輕伺服器負擔,提高網站訪問速度。