【discuz伪静态】系列之三:TAG标签伪静态方案-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

【discuz伪静态】系列之三:TAG标签伪静态方案

wgrid.cn 2015-05-22 12:43:21 11207
此篇为系列教程,为还在为dz伪静态烦恼的站长们助力(译版:为了申请版主而做准备)!  
以discuz!3.2 + nginx为例!Apache,iis请自行转换!  
  
【重要提醒:修改前请备份源文件,如果发现修改后进入页面空白,请检查代码是否修改正确!】  
  
由于这个是把重要的代码全部【code】化,所以看起来会比较累!  
所以提供百度文库及其豆丁版(都是本人上传,版主如果觉得有广告嫌疑请删除此段)  
百度文库:http://wenku.baidu.com/view/f82c229efc4ffe473368abcc
豆丁:http://www.docin.com/p-1150299492.html




Discuz X3.2默认是禁止搜索引擎访问 misc.php 文件的,因此 tag 不会被收录。
我们可以将 tag 网址伪静态化,这样不仅使 tag 网址看上去更规范美观,还使 tag 页面可以被百度收录。
第一步,复制根目录下的 misc.php 文件为 misc_tag.php 文件,删除其中的
$discuz->reject_robot();
(否则搜索引擎无法访问)。


第二步,增加伪静态规则(以Nginx为例)。
rewrite ^([^\.]*)/tag.html$ $1/misc_tag.php?mod=tag last;
rewrite ^([^\.]*)/tag-([1-9][0-9]*)-1\.html$ $1/misc_tag.php?mod=tag&id=$2 last;
rewrite ^([^\.]*)/tag-([1-9][0-9]*)-([2-9]|[1-9][0-9]+)\.html$ $1/misc_tag.php?mod=tag&id=$2&type=thread&page=$3 last;

注意:必须添加在“插件”页面的伪静态规则(即 rewrite ^([^\.]*)/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html$ $1/plugin.php?id=$2:$3 last; 行)之前的任意位置。添加后需要 重载 或 关闭后再启动 Nginx后生效(仅直接重启无效)。
该规则使 tag标签页面 支持以网址 tag-标签编号-标签页数.html 访问指定标签页面。


第三步,修改Discuz程序,使 tag链接 由原有的动态链接换为伪静态链接。
1、打开 template/default/tag/tagitem.htm 模板文件,

<a class="xi2" href="misc.php?mod=tag&id=$id&type=thread">{lang more}...</a>
修改为:
<a href="tag-$id-2.html" class="xi2" style="font-weight: bold;">查看更多相关帖子 >>></a>



<a class="xi2" href="misc.php?mod=tag&id=$id&type=blog">{lang more}...</a>
修改为:
<a href="misc.php?mod=tag&id=$id&type=blog" class="xi2" style="font-weight: bold;">查看更多相关日志 >>></a>



<a href="misc.php?mod=tag">{lang tag}</a>
修改为:
<a href="tag.html">{lang tag}</a>



<a href="misc.php?mod=tag&id=$id">$tagname</a>
修改为:
<a href="tag-$id-1.html">$tagname</a>



<!--{loop $threadlist $thread}-->
修改为
{eval $tiaoshu = 0}<!--{loop $threadlist $thread}-->{eval $tiaoshu ++;}


将第一个
<!--{if empty($showtype)}-->
修改为
<!--{if empty($showtype) && $tiaoshu >= 20}-->



action="misc.php?mod=tag"
修改为
action="tag.html"


2、修改翻页按钮。打开 source/module/misc/misc_tag.php 文件,

$multipage = multi($count, $tpp, $page, "misc.php?mod=tag&id=$tag[tagid]&type=thread");
修改为
$multipage = multi_guide($count, $tpp, $page, "tag-$tag[tagid]");
注意:如果您已经按照本站 http://bbs.wgrid.cn/thread-43-1-1.html 所述方法进行了“导读”页面的伪静态优化,则此步骤完成。如果您未进行过相关优化,还需要继续进行以下修改:
打开 source/function/function_core 文件,在
function simplepage($num, $perpage, $curpage, $mpurl) {
前面增加一段(定义multi_guide):
function multi_guide($num, $perpage, $curpage, $mpurl, $maxpages = 0, $page = 10, $autogoto = FALSE, $simple = FALSE, $jsfunc = FALSE) {
return $num > $perpage ? helper_page_guide::multi($num, $perpage, $curpage, $mpurl, $maxpages, $page, $autogoto, $simple, $jsfunc) : '';
}



进入 source/class/helper/ 目录,将 helper_page.php 复制一份命名为 helper_page_guide.php 。并依次修改 helper_page_guide.php 文件中的以下部分:

helper_page
修改为
helper_page_guide
(共两处,其中文件头注释中的那处无关紧要);将
$pagevar = 'page=';
修改为
$pagevar = '-';



$jsurl = $mpurl.(strpos($mpurl, '{page}') !== false ? '\'.replace(\'{page}\', this.value == 1 ? \'\' : this.value)': $pagevar.'\'+this.value;').'; doane(event);';
修改为
$jsurl = substr($mpurl, 0, -1).(strpos($mpurl, '{page}') !== false ? '\'.replace(\'{page}\', this.value == 1 ? \'\' : this.value)': $pagevar.'\'+this.value').'+\'.html\'; doane(event);';
(此项操作使手动输入页码翻页时链接静态化);



return $mpurl.$separator.$pagevar.$page;
修改为
return substr($mpurl, 0, -1).$separator.$pagevar.$page.'.html';
(翻页页码链接静态化)。


3、修改title。打开 source/module/misc/misc_tag.php 文件,

$navtitle = $tagname ? $taglang.' - '.$tagname : $taglang;
修改为:
$navtitle = $tagname ? $tagname.$title_page.' - '.$taglang : $taglang;
并在其前面加入一行:
[code]if($_GET['page']) { $title_page = '(第'.$_GET['page'].'页)'; }[/code]


4、使tag首页列出的tag链接和搜索按钮伪静态化。打开 template/default/tag/tag.htm 模板文件,

[code]<a href="misc.php?mod=tag&id=$tag[tagid]" title="$tag[tagname]" target="_blank" class="xi2">$tag[tagname]</a>[/code]
修改为:
[code]<a href="tag-$tag[tagid]-1.html" target="_blank" class="xi2">$tag[tagname]</a>[/code]

[code]action="misc.php?mod=tag"[/code]
修改为
[code]action="tag.html"[/code]


5、修改帖子页面上的tag链接,使其静态化。打开 template/default/forum/viewthread_node_body.htm 模板文件(部分模板可能在 viewthread_node.htm 文件中,自行查找),

[code]misc.php?mod=tag&id=$var[0][/code]
(部分模板可能不只一处,搜索查找确认),修改为
[code]tag-{echo intval($var[0])}-1.html[/code]


6、修改标签不存在时返回标签首页的链接。
打开 source/language/tag/lang_template.php 文件,

[code]<a href="misc.php?mod=tag" title="返回标签首页">返回标签首页</a>[/code]
修改为
[code]<a href="tag.html" style="font-weight: bold;">返回标签首页</a>[/code]


第四步(可选),附加优化。
1、打开 template/default/tag/tagitem.htm 模板文件,
删除
[code]<h1 class="mt"><img class="vm" src="{IMGDIR}/tag.gif" alt="tag" /> {lang tag}: $tagname</h1>[/code]
可以去掉列表上方的“标签:XXX”字样(重复,影响美观)。

[code]<th><h2>{lang related_thread}</h2></th>[/code]
修改为
[code]<th><h2>包含关键字 $tagname 的{lang related_thread}</h2></th>[/code]
可以将“相关帖子”替换为“包含关键字 XXX 的相关帖子”。



[code]<h2>{lang related_blog}</h2>[/code]
修改为
[code]<h2>包含关键字 $tagname 的{lang related_blog}</h2>[/code]
可以将“相关日志”替换为“包含关键字 XXX 的相关日志”。



[code]<p class="emp">{lang no_content}</p>[/code]
(共两处)替换为
[code]<p class="emp" style="padding-left:30px;">{lang no_content}</p>[/code]
可将“没有相关内容”字样右移30px,使之与存在的内容标题对齐。



[code]<p class="emp">{lang empty_tags}</p>[/code]
替换为
[code]<p>{lang empty_tags}</p>[/code]


2、SEO,优化TAG页面上的内容列表。自行修改 template/default/tag/tagitem.htm 模板文件,给作者链接加上 nofollow ,去除查看数、最后回帖作者、最后回帖时间上的链接。
参考:http://bbs.wgrid.cn/thread-43-1-1.html


3、让不存在的TAG页面返回404状态码。修改 source/module/misc/misc_tag.php 文件,

[code]include_once template('tag/tagitem');[/code]
前加入以下代码:
[code]if($_GET['id'] && (!$tagname || !$threadlist) && $type != 'blog') {
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
}[/code]


【discuz伪静态】系列之一:http://bbs.aliyun.com/read/244384.html  
【discuz伪静态】系列之二:http://bbs.aliyun.com/read/244388.html  
【discuz伪静态】系列之三: http://bbs.aliyun.com/read/244531.html
【discuz伪静态】系列之四:http://bbs.aliyun.com/read/244529.html
【discuz伪静态】系列之五(附件篇):
搜索推荐 应用服务中间件 nginx
分享到
取消 提交回答
全部回答(0)
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题
推荐课程