错误页面重定向

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

造成不同点在于入口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 Admin\Controller;
use Think\Controller;

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;
        }

猜你喜欢

转载自www.cnblogs.com/wen-zi/p/9237857.html