帝國CMS8.0完美偽靜態:classpath+filename
帝國cms8.0偽靜態,實現欄目列表以及文章內容頁的完美偽靜態效果:classpath+filename的偽靜態形式。
列表頁: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等方式來更好的減輕伺服器負擔,提高網站訪問速度。