老张小站

  1. 欢迎光临

    感谢访问老张的博客!

  • 1
9,853

Discuz! X3.1 TAG标签伪静态方案(完美版)

分类 网站技术/村民张先生 发布于 2014-07-28 18:27
8

Discuz X3.1默认是禁止搜索引擎访问 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]");

注意:如果您已经按照本站 https://www.zhang.cq.cn/wenzhang-268.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;

并在其前面加入一行:

if($_GET['page']) { $title_page = '(第'.$_GET['page'].'页)'; }

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

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

<a href="tag-$tag[tagid]-1.html" target="_blank" class="xi2">$tag[tagname]</a>

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

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

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

6、修改标签不存在时返回标签首页的链接。

打开 source/language/tag/lang_template.php 文件,

将 <a href="misc.php?mod=tag" title="返回标签首页">返回标签首页</a> 修改为

 <a href="tag.html" style="font-weight: bold;">返回标签首页</a>

第四步(可选),附加优化。

1、打开 template/default/tag/tagitem.htm 模板文件,

删除 <h1 class="mt"><img class="vm" src="{IMGDIR}/tag.gif" alt="tag" /> {lang tag}: $tagname</h1> 可以去掉列表上方的“标签:XXX”字样(重复,影响美观)。

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

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

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

将 <p class="emp">{lang empty_tags}</p> 替换为 <p>{lang empty_tags}</p>

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

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

include_once template('tag/tagitem'); 前加入以下代码:

if($_GET['id'] && (!$tagname || !$threadlist) && $type != 'blog') {
header("HTTP/1.1 404 Not Found");
header("Status: 404 Not Found");
}

欢迎转载分享,转载请注明 来源:大张小站 https://www.zhang.cq.cn/2014389.html
若您喜欢这篇文章,欢迎订阅老张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。


已经有 8 条群众意见

  1. 石头 /2015-01-27 15:25

    进行到第二步最后一个文档之后网站打开空白,连后台也是白的! 回应

    #1
  2. 张工长石头/2015-02-05 16:23

    第二步?第二步是添加伪静态规则啊,在你的主机面板或WEB服务程序配置文件里修改,修改后重启。如果是其它步骤错误,请确认一下末尾的分号是不是复制掉了,注意看我的下划线。 回应

    #2
  3. 小琪 /2015-04-12 19:22

    复制根目录下的 misc.php 文件为 misc_tag.php 文件 这句没看明白 回应

    #3
  4. 张工长小琪/2015-04-13 21:07

    将 misc.php 复制一份命名为 misc_tag.php 。 回应

    #4
  5. 孤城 /2016-10-09 23:44

    增加伪静态规则,linux系统的怎么改换- -! 回应

    #5
  6. 张长工孤城/2016-10-11 23:43

    文中就是Linux下Nginx的伪静态规则,我不知道你用的什么Web服务程序。如果是Apache的话,你对比一下Discuz官方的Apache伪静态规则与Nginx伪静态规则的区别,然后依照它的区别修改一下。如果你是说怎么操作的话,建议使用Linux下的Web管理面板,一般有提供设置伪静态的功能。 回应

    #6
  7. 菜鸟站长 /2018-08-17 10:55

    你好,大神。请问对discuz X3.4版本有效吗?还有这段话,我不是很懂:
    在 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) : ”;
    }

    在前面加的话,完整的代码是不是这样:
    function simplepage($num, $perpage, $curpage, $mpurl) {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) : ”;
    } 回应

    #7
  8. 菜鸟站长/2018-09-11 20:57

    X3.4没测试。是在该行前面新增一段,而不是插入到中间后后面! 回应

    #8

欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截