帝国CMS动态页面输出“此信息不存在”时状态码改为404

2022-07-03 09:22:38   lyingjie
经常使用帝国的朋友都知道,如果用帝国不生成静态页面,改用动态页面时,当删除了一条信息后,在点击这个链接时会出现“此信息不存在”,百度抓取时状态码还是正常的200,那么百度爬虫还会认为此页面为正常页面,但当我们删除后,我们实际是要告诉百度百度此页面已不存在,也就是状态码为404,而帝国的大神们没有对此做除理,那么就需要我们自已来除理了。
我们分析动态页面后知道正常情况当ID不存在时会触发printerror函数,那么我们就可以真对printerror进行除理,当我们深入研究后发现一般情况下出发的函数传入的参数如下:
if(!$classid||!$id||!$mid||!$tbname||InfoIsInTable($tbname))
{
        printerror('此信息不存在','',1,0,1);
}

printerror('错误提示信息','提示错误后跳转的URL(可为空)','错误提示样式','','');
那么错误提示样式为1,我们可以从e/class/connect.php中找到printerror,并可以看到下内容:

//错误提示
function printerror($error="",$gotourl="",$ecms=0,$noautourl=0,$novar=0){
        global $empire,$editor,$public_r,$ecms_config;
        if($editor==1){$a="../";}
        elseif($editor==2){$a="../../";}
        elseif($editor==3){$a="../../../";}
        else{$a="";}
        if($ecms==1||$ecms==9)
        {
                $a=ECMS_PATH.'e/data/';
        }
        if(strstr($gotourl,"(")||empty($gotourl))
        {
                if(strstr($gotourl,"(-2"))
                {
                        $gotourl_js="history.go(-2)";
                        $gotourl="javascript:history.go(-2)";
                }
                else
                {
                        $gotourl_js="history.go(-1)";
                        $gotourl="javascript:history.go(-1)";
                }
        }
        else
        {$gotourl_js="self.location.href='$gotourl';";}
        if(empty($error))
        {$error="DbError";}
        if($ecms==9)//前台弹出对话框
        {
                @include $a.LoadLang("pub/q_message.php");
                $error=empty($novar)?$qmessage_r[$error]:$error;
                echo"<script>alert('".$error."');".$gotourl_js."</script>";
                db_close();
                $empire=null;
                exit();
        }
        elseif($ecms==8)//后台弹出对话框
        {
                @include $a.LoadLang("pub/message.php");
                $error=empty($novar)?$message_r[$error]:$error;
                echo"<script>alert('".$error."');".$gotourl_js."</script>";
                db_close();
                $empire=null;
                exit();
        }
        elseif($ecms==7)//前台弹出对话框并关闭窗口
        {
                @include $a.LoadLang("pub/q_message.php");
                $error=empty($novar)?$qmessage_r[$error]:$error;
                echo"<script>alert('".$error."');window.close();</script>";
                db_close();
                $empire=null;
                exit();
        }
        elseif($ecms==6)//后台弹出对话框并关闭窗口
        {
                @include $a.LoadLang("pub/message.php");
                $error=empty($novar)?$message_r[$error]:$error;
                echo"<script>alert('".$error."');window.close();</script>";
                db_close();
                $empire=null;
                exit();
        }
        elseif($ecms==0)
        {
                @include $a.LoadLang("pub/message.php");
                $error=empty($novar)?$message_r[$error]:$error;
                @include($a."message.php");
        }
        else
        {
                @include $a.LoadLang("pub/q_message.php");
                $error=empty($novar)?$qmessage_r[$error]:$error;
                @include($a."../message/index.php");
        }
        db_close();
        $empire=null;
        exit();
}

既然找到了错误时输出的内容那么我们就可以在输出内容的最前面加入以下内容:
@header("HTTP/1.0 404 Not Found.");
@header("status: 404 Not Found");
至于为什么要在最前面加大家可以去查下header使用手册,这里就不在细说了。
修改后的内容如下:

//错误提示
function printerror($error="",$gotourl="",$ecms=0,$noautourl=0,$novar=0){
        global $empire,$editor,$public_r,$ecms_config;
        if($editor==1){$a="../";}
        elseif($editor==2){$a="../../";}
        elseif($editor==3){$a="../../../";}
        else{$a="";}
        if($ecms==1||$ecms==9)
        {
                $a=ECMS_PATH.'e/data/';
        }
        if(strstr($gotourl,"(")||empty($gotourl))
        {
                if(strstr($gotourl,"(-2"))
                {
                        $gotourl_js="history.go(-2)";
                        $gotourl="javascript:history.go(-2)";
                }
                else
                {
                        $gotourl_js="history.go(-1)";
                        $gotourl="javascript:history.go(-1)";
                }
        }
        else
        {$gotourl_js="self.location.href='$gotourl';";}
        if(empty($error))
        {$error="DbError";}
        if($ecms==9)//前台弹出对话框
        {
                @include $a.LoadLang("pub/q_message.php");
                $error=empty($novar)?$qmessage_r[$error]:$error;
                echo"<script>alert('".$error."');".$gotourl_js."</script>";
                db_close();
                $empire=null;
                exit();
        }
        elseif($ecms==8)//后台弹出对话框
        {
                @include $a.LoadLang("pub/message.php");
                $error=empty($novar)?$message_r[$error]:$error;
                echo"<script>alert('".$error."');".$gotourl_js."</script>";
                db_close();
                $empire=null;
                exit();
        }
        elseif($ecms==7)//前台弹出对话框并关闭窗口
        {
                @include $a.LoadLang("pub/q_message.php");
                $error=empty($novar)?$qmessage_r[$error]:$error;
                echo"<script>alert('".$error."');window.close();</script>";
                db_close();
                $empire=null;
                exit();
        }
        elseif($ecms==6)//后台弹出对话框并关闭窗口
        {
                @include $a.LoadLang("pub/message.php");
                $error=empty($novar)?$message_r[$error]:$error;
                echo"<script>alert('".$error."');window.close();</script>";
                db_close();
                $empire=null;
                exit();
        }
        elseif($ecms==0)
        {
                @include $a.LoadLang("pub/message.php");
                $error=empty($novar)?$message_r[$error]:$error;
                @include($a."message.php");
        }
        else
        {
                @header("HTTP/1.0 404 Not Found.");
                @header("status: 404 Not Found");
                @include $a.LoadLang("pub/q_message.php");
                $error=empty($novar)?$qmessage_r[$error]:$error;
                @include($a."../message/index.php");
        }
        db_close();
        $empire=null;
        exit();
}
本站文章均为九脑科技摘自权威资料,书籍,或网络原创文章,如有版权纠纷或者违规问题,请即刻联系我们删除,我们欢迎您分享,引用和转载,我们谢绝直接复制和抄袭!感谢...