帝国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等方式来更好的减轻服务器负担,提高网站访问速度。