DedeCMS全站伪静态实现方法

DedeCMS全站伪静态实现方法

DedeCMS默认的是页面都以纯静态方式展示,这样就要求我们在发布新文章或者新建栏目之后要及时更新和生成相应的Html页面,这样的好处是服务器的压力小,缺点是操作繁琐,不管是修改还是发布文章都要重新生成页面,而且静态的html页面一旦多起来会占据大量的空间。

余斗用过WordPress之后,很喜欢它的动态浏览方式,而且实现伪静态也很方便。那么,DedeCMS有没有什么方法可以实现全站页面伪静态呢?余斗搜集整理了方法:

在做伪静态之前,你要了解自己的空间是否支持伪静态,据目前主流的空间服务商而言,分为Apache服务器和IIS服务器,大都支持伪静态,其中,Apache服务器设置伪静态要在.htaccess文件中加入伪静态规则;IIS服务器要先加载Rewrite组件,再配置httpd.ini文件即可。

一、后台设置

1.后台-系统-系统基本参数 -核心设置-是否使用伪静态:勾选“是”;

2.如果开启了问答模块,还需要在后台-系统-系统基本参数-是否使用Rewrite,勾选“是”;

3.如果是新建网页后台,则在创建栏目时要在栏目列表选项中选择“使用动态页”,添加文章的时候在发布选项也选择”仅动态浏览“。

二、已有静态页面修改

如果网站中已存在静态栏目和文章,那么需要批量修改为动态浏览,具体方法为:后台-系统-SQL命令执行工具,输入以下两行SQL语句:


update dede_arctype
set isdefault=-
1;


update dede_archives
set ismake=-
1;

 

注意的是,这里的dede_arctype中,dede为数据表的前缀,如果大家自己在安装后台的时候修改过,要记得换为自己的数据表名。

三、页面伪静态配置

1.首页

将站点根目录下的index.html文件删除,以后不更新主页html即可。当然也可以直接在首页更新选项中选择“动态浏览”。

2.频道/列表页

DedeCMS5.7及以上版本打开/include/helpers/channelunit.helper.php,DedeCMS5.7以下版本打开/include/channelunit.func.php。找到:


//动态

$reurl = $GLOBALS[
‘cfg_phpurl’].
“/list.php?tid=”.$typeid;

 

修改为:


//动态

$reurl =
“/category/list-“.$typeid.
“.html”;

 

这步必须修改,实现频道或是列表页动态的URL变更为/category/list-1.html形式。其中的单词category和list都可以按照自己的喜好来修改,但是记得一定要与接下来的伪静态规则中的单词一致。

3.文章页

与栏目页一样修改同个文件,将代码:


//动态文章


if($cfg_rewrite ==
‘Y’)

{


return $GLOBALS[
“cfg_plus_dir”].
“/view-“.$aid.
‘-1.html’;

}

 

修改为:


//动态文章


if($cfg_rewrite ==
‘Y’)

{


return “/archives/view-“.$aid.
‘-1.html’;

}

 

这步非必需 ,是就将默认的文章页格式/plus/view-1-1.html修改为/archives/view-1-1.html这个样子,其中的单词都可以按照自己的喜好来修改,但是记得一定要与接下来的伪静态规则中的单词一致。

4.频道/列表页分页

打开/include/arc.listview.class.php,将代码:

$plist = str_replace(
‘.php?tid=’,
‘-‘, $plist);

 

修改为:

$plist = str_replace(
‘plus’,
‘category’, $plist);
//将默认的plus替换成category

$plist = str_replace(
‘.php?tid=’,
‘-‘, $plist);

 

这步非必需 ,是将默认的列表页分页格式/plus/list-1-2-1.html修改为/category/list-1-2-1.html

5.文章页分页

打开打开/include/arc.archives.class.php,将代码:

$PageList = str_replace(
“.php?aid=”,
“-“,$PageList);

 

修改为:

$plist = str_replace(
‘plus’,
‘archives’, $plist);
//将默认的plus替换成archives

$PageList = str_replace(
“.php?aid=”,
“-“,$PageList);

 

这步非必需,是将默认的文章页分页格式/plus/list -1-2-1.html修改为/archives/list-1-2-1.html。

6.Tag标签页

打开/include/taglib/tag.lib.php,将代码:

$row[
‘link’] = $cfg_cmsurl.
“/tags.php?/”.urlencode($row[
‘keyword’]).
“/”;

 

修改为:

$row[
‘link’] = $cfg_cmsurl.
“/tags/”.urlencode($row[
‘keyword’]).
“/”;

 

DedeCMS默认的tag的URL格式为:/tags.php?/标签/,我们修改之后的样式为:/tags.php/dedecms5.7/。

7.搜索页

打开include文件夹下的channelunit.func.php、arc.searchview.class.php、arc.taglist.class.php以及/include/taglib/hotwords.lib.php文件,分别查找“search.php?”替换为“search.htm?”。

这里要注意的是,DedeCMS搜索页的URL静态化很麻烦,不同的搜索条件,附带的参数也不同,静态规则也很难写,有能力的可以进一步做静态化处理。

四、伪静态规则

如果你是依照上述修改方式修改代码,则以下静态规则可以复制使用,如果个别地方改变则要针对性修改。

1.IIS伪静态规则

打开httpd.ini,加入:

#首页伪静态规则,如果不使用动态首页,请勿必删除这一行,否则打开首页会出现死循环

RewriteRule ^(.*)/
index\.html $1/
index\.php [I]

#列表页伪静态规则

RewriteRule ^(.*)/category/list-([
0
9]+)\.html $1/plus/list\.php\?tid=$2 [I]

RewriteRule ^(.*)/category/list-([
0
9]+)-([
0
9]+)-([
0
9]+)\.html $1/plus/list\.php\?tid=$2&TotalResult=$3&PageNo=$4 [I]

#文章页伪静态规则

RewriteRule ^(.*)/archives/view-([
0
9]+)-([
0
9]+)\.html $1/plus/view\.php\?arcID=$2&pageno=$3 [I]

#搜索伪静态规则

RewriteRule ^(.*)/
search\.html(?:(\?.*))* $1/
search\.php?$2 [I]

#TAG标签伪静态规则

RewriteRule ^(.*)/
tags\.html $1/
tags\.php [I]

RewriteRule ^(.*)/
tags/(.*)(?:(\?.*))* $1/
tags\.php\?\/$2 [I]

RewriteRule ^(.*)/
tags/(.*)\/(?:(\?.*))* $1/
tags\.php\?\/$2\/ [I]

RewriteRule ^(.*)/
tags/(.*)\/([
0
9])(?:(\?.*))* $1/
tags\.php\?\/$2\/$3 [I]

RewriteRule ^(.*)/
tags/(.*)\/([
0
9])\/(?:(\?.*))* $1/
tags\.php\?\/$2\/$3\/ [I]

#问答伪静态规则,适用于DedeCmsV5.
3
5.6版本,需要修改几处程序

RewriteRule ^(.*)/post\.html $1/post\.php [I]

RewriteRule ^(.*)/
type\.html $1/
type\.php [I]

RewriteRule ^(.*)/question-([
0
9]+)\.html $1/question\.php\?
id=$2 [I]

RewriteRule ^(.*)/browser-
1-([
0
9]+)\.html $1/browser\.php\?tid=$2 [I]

RewriteRule ^(.*)/browser-
2-([
0
9]+)\.html $1/browser\.php\?tid2=$2 [I]

RewriteRule ^(.*)/browser-
1-([
0
9]+)-([
0
9]+)\.html $1/browser\.php\?tid=$2&page=$3 [I]

RewriteRule ^(.*)/browser-
2-([
0
9]+)-([
0
9]+)\.html $1/browser\.php\?tid2=$2&page=$3 [I]

RewriteRule ^(.*)/browser-([
0
9]+)\.html $1/browser\.php\?lm=$2 [I]

RewriteRule ^(.*)/browser-
1-([
0
9]+)-([
0
9]+)\.html $1/browser\.php\?tid=$2&lm=$3 [I]

RewriteRule ^(.*)/browser-
2-([
0
9]+)-([
0
9]+)\.html $1/browser\.php\?tid2=$2&lm=$3 [I]

 

2.Apache伪静态规则

打开网站根目录下的.htaccess文件,加入:

#提供部分规则作参考

RewriteRule ^category/list-([
0
9]+)\.html$/plus/list.php?tid=$1

RewriteRule ^category/list-([
0
9]+)-([
0
9]+)-([
0
9]+)\.html$/plus/list.php?tid=$1&totalresult=$2&PageNo=$3

RewriteRule ^archives/view-([
0
9]+)-([
0
9]+)\.html$/plus/view.php?arcID=$1&pageno=$2

 

扩展:以Apache为例,如果文章页格式为/article/1.html,列表页格式为/category/list_1.html,分页样式为/category/list_1_1.html这种格式,在修改各自的核心php文件时,要对应为:

文章页:

 
//动态文章


if($cfg_rewrite ==
‘Y’)

{


return “/article/”.$aid.
‘.html’;

}

 

文章页分页:

$plist = str_replace(
‘plus’,
‘article’, $plist);
//将默认的plus替换成article

$PageList = str_replace(
“.php?aid=”,
“_”,$PageList);

 

频道/列表页:


//动态

$reurl =
“/category/list_”.$typeid.
“.html”;

 

频道/列表页分页:

$plist = str_replace(
‘plus’,
‘category’, $plist);
//将默认的plus替换成category

$plist = str_replace(
‘.php?tid=’,
‘_’, $plist);

 

则伪静态规则为::

RewriteRule ^category/list_([
0
9]+)\.html$/plus/list.php?tid=$1

RewriteRule ^category/list_([
0
9]+)_([
0
9]+)_([
0
9]+)\.html$/plus/list.php?tid=$1&totalresult=$2&PageNo=$3

RewriteRule ^archives/([
0
9]+)\.html$/plus/view.php?arcID=$1&pageno=$2

 

这里列出来的是给大家一个思路,伪静态规则根据自己的格式要做不同的修改,根据理想的URL结构写好伪静态规则,然后对程序进行相应修改,并没有你想象中的那么复杂大家不要怕麻烦,多看,多学,多做就能实现全站伪静态。如果还有什么问题,可以联系余斗咨询。

分享到 :
相关推荐