错误页面重定向

Posted wen-zi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误页面重定向相关的知识,希望对你有一定的参考价值。

我是觉得错误页面重定向分为两种

造成不同点在于入口index.php文件,差别

define(‘APP_DEBUG‘,false);

 

一 按手册   搜索 “异常处理”,那样配置,我觉得这种配置是在,  APP_DEBUG  为TRUE的情况处理的

在config 文件配置

 ‘SHOW_PAGE_TRACE‘ => false,
    ‘SHOW_ERROR_MSG‘ => false,
    ‘ERROR_MESSAGE‘ => ‘发生错误!‘,
    ‘ERROR_PAGE‘ =>‘/Public/error‘,
    /* 错误页面模板 */
    ‘TMPL_ACTION_ERROR‘     =>  MODULE_PATH.‘View/Public/error.html‘, // 默认错误跳转对应的模板文件‘
    ‘TMPL_ACTION_SUCCESS‘   =>  MODULE_PATH.‘View/Public/success.html‘, // 默认成功跳转对应的模板文件‘
    ‘TMPL_EXCEPTION_FILE‘   =>  MODULE_PATH.‘View/Public/error.html‘,// 异常页面的模板文件

当然 你要确保你的文件路径是对的

 

二    当我们上线的正式环境是,调试是要关闭的APP_DEBUG  为false的情况处理的,那么就会发现一个坑!!!!!

输入错误的路径,你会发现  竟然不会跳转到  你定义的404页面!!!!!

后面再这里找到办法https://www.cnblogs.com/dee0912/p/5140063.html

一、入口文件关闭调试,配置文件配置异常页面

在生产环境中系统的错误信息不能暴露给用户,入口文件的 APP_DEBUG 默认为开启状态

define(‘APP_DEBUG‘,true);

此时如果用户访问到不存在的模块、控制器或者方法会出现:

技术分享图片

 

在生产环境中需要把 APP_DEBUG 设置为 FALSE 或者将该定义屏蔽:

define(‘APP_DEBUG‘,false);

此时如果用户访问到不存在的模块、控制器或者方法会出现:

技术分享图片

这个错误的默认模板页在 ./ThinkPHP/Tpl/think_exception.tpl,可以设置自定义的异常页面来代替 ThinkPHP 默认的错误页面,在配置文件 config.php 中配置:

    //异常页面
    ‘TMPL_EXCEPTION_FILE‘ => ‘./Public/Admin/error.html‘,

 

在访问不存在的模块、控制器或方法时,会加载默认的或者自定义的异常页面模板。

 

二、定义 EmptyController 类

例如在 Admin 模块下创建一个 EmptyController.class.php,里面的 index 方法定义当用户访问一个不存在的控制器时系统该如何处理:

技术分享图片
<?php
namespace AdminController;
use ThinkController;

class EmptyController extends Controller{
    public function index(){
       //跳转或加载404页
    }
}
技术分享图片

 

三、定义空操作 _empty()

例如在 Admin 模块的  Common 控制器中定义一个 _empty() 方法,当用户访问一个不存在的方法时,就会按照空方法中的设置进行处理:

    //空方法
    function _empty() {
        //跳转或加载404页
    }

注:如果同时请求一个不存在的控制器和一个不存在的方法,或者请求一个不存在的模块时,会加载默认或者自定义的异常页面,而不会执行 EmptyController::index 或 _empty()。

 

四、数据库错误

在默认情况下,如果程序中的 SQL 语句出现了语法错误,很可能会把数据库信息暴露给用户:

技术分享图片

注:在 APP_DEBUG 为 TRUE 且没有自定义异常页面时发生数据库错误会输出以上信息。

在关闭 APP_DEBUG 后,遇到数据库错误时,会加载默认的或者自定义的异常页面。如果希望在发生数据库错误时进行自定的处理时,可以在配置文件中设置数据库调试模式为 FALSE(该配置默认值是 TRUE):

‘DB_DEBUG‘  =>  FALSE, // 数据库调试模式 开启后可以记录SQL日志 3.2.3新增

当该选项开启时,会记录 SQL 日志,路径是 ./Application/Runtime/Logs/YourModule/

技术分享图片

 

但是当该选项开启时,无法自定义处理异常,只能加载系统默认或者自定义的一场模板。如果关闭该选项,同时在开发时与数据库相关的操作都必须捕获异常,例如:

        $result = M(‘session‘)->field(‘a‘)->select();
        if($result === false) {
            //处理
        }

或者

try {
    $result= M("session")->field(‘a‘)->select();
} catch (Exception $e) {
    //处理
}

 

注:捕获异常可以参见 ./ThinkPHP/Library/Think/Db/Driver.class.php Line:169

技术分享图片
        try{
            $result =   $this->PDOStatement->execute();
            // 调试结束
            $this->debug(false);
            if ( false === $result ) {
                $this->error();
                return false;
            } else {
                return $this->getResult();
            }
        }catch (PDOException $e) {
            $this->error();
            return false;
        }

 

以上是关于错误页面重定向的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 重定向期间处理片段标识符

php:如何重定向到带有错误消息的同一页面

404错误页面未使用htaccess重定向到自定义页面

在 cPanel 中创建自定义 PHP 错误页面,而不将它们从引发错误的页面重定向

Python QWebEngineView 重定向到错误的语言页面

Linkedin OAuth 2.0 重定向 URL 不能包含片段标识符 (#)