老张小站

  1. 欢迎光临

    感谢访问老张的博客!

  • 1
2,833

Discuz! X3.* 访问不存在的页码时返回404状态码(2019/12/04更新)

分类 网站技术/村民张先生 发布于 2014-07-31 23:03
0

默认情况下,当您访问不存在的版块页码时,会显示版块第1页。

例如,当你某个版块目前总共只有5页时,如果网址页码是6或更大的数,则实际会显示版块第1页。这可能造成大量不同网址指向相同内容的页面(尽管正常情况下你的网站内并不会出现这些不应该存在的页码链接),不利于SEO。可进行以下修改以解决此问题。

打开 source/module/forum/forum_forumdisplay.php 文件,查找

if($filter != 'hot' && @ceil($_G['forum_threadcount']/$_G['tpp']) < $page) {

将其中的 $page 替换为 $_G['page'] ;再将其下方的 $page = 1; 替换为:

header('HTTP/1.1 404 Not Found');
header('status: 404 Not Found');
showmessage('此页面不存在,或暂时无法为您提供服务。<a href="./">返回首页</a>');
exit;

进行此修改后,访问不存在的版块页码时,将会返回404状态码和提示语。

默认情况下,当访问不存在的帖子页码时,会显示帖子的最后一页,同样可能造成大量不同网址指向相同内容的页面。可以进行以下修改以解决此问题。

打开 source/module/forum/forum_viewthread.php 文件,查找 $page > $totalpage && $page = $totalpage; 替换为:

if($totalpage && $page > $totalpage) {
header('HTTP/1.1 404 Not Found');
header('status: 404 Not Found');
showmessage('此页面不存在,或暂时无法为您提供服务。<a href="./">返回首页</a>');
exit;
}

最后还有一种特殊情况,当页码为0时,默认会显示第1页。我们可以通过修改伪静态规则来进行限制:

以Nginx为例,将伪静态规则中代表页码部分的 ([0-9]+) (注意并不是规则中所有的这个代码,请只替换表示page部分的这个代码)修改为 ([1-9][0-9]*) ,保存并重载您的WEB服务器。替换后,版块和帖子的伪静态规则分别为:

rewrite ^([^\.]*)/forum-(\w+)-([1-9][0-9]*)\.html$ $1/forum.php?mod=forumdisplay&fid=$2&page=$3 last;
rewrite ^([^\.]*)/thread-([0-9]+)-([1-9][0-9]*)-([1-9][0-9]*)\.html$ $1/forum.php?mod=viewthread&tid=$2&extra=page%3D$4&page=$3 last;

注意!如果您开启了插件页面的伪静态,修改后,当访问类似 forum-1-0.html 或 thread-1-0-1.html / thread-1-1-0.html 等页码为0的页面时,将提示“插件不存在或已关闭”,您需要参照 https://www.zhang.cq.cn/wenzhang-379.html 第3、4条对不存在的插件页面返回404状态码。同时,您可修改 source/language/lang_message.php 文件中的“插件不存在或已关闭”提示语为“此页面不存在,或暂时无法提供服务。”。

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


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