【thinkphp】3.2.3 ERROR_PAGE配置不生效终极解决办法

浏览:525 发布日期:2018/02/07 分类:系统代码 关键字: ERROR_PAGE thinkphp
【thinkphp】3.2.3 ERROR_PAGE配置不生效终极解决办法
在做错误页跳转的时候
App\Common\Conf\config.php 中配置了ERROR_PAGE不生效
入口文件APP_DEBUG 也改成了false
Apache伪静态也没问题
缓存目录也清空了
但是就是不跳转指定的页面
本地测试正常 但是再服务器上打死都不跳转 同样的环境
最终在服务器上跟踪代码
ThinkPHP\Library\Think\Think.class.php    /**
     * 错误输出
     * @param mixed $error 错误
     * @return void
     */
    static public function halt($error) {
        $e = array();
        if (APP_DEBUG || IS_CLI) {
            //调试模式下输出错误信息
            if (!is_array($error)) {
                $trace          = debug_backtrace();
                $e['message']   = $error;
                $e['file']      = $trace[0]['file'];
                $e['line']      = $trace[0]['line'];
                ob_start();
                debug_print_backtrace();
                $e['trace']     = ob_get_clean();
            } else {
                $e              = $error;
            }
            if(IS_CLI){
                exit(iconv('UTF-8','gbk',$e['message']).PHP_EOL.'FILE: '.$e['file'].'('.$e['line'].')'.PHP_EOL.$e['trace']);
            }
        } else {
            //否则定向到错误页面
            $error_page         = C('ERROR_PAGE');
            if (!empty($error_page)) {
                redirect($error_page);
            } else {
                $message        = is_array($error) ? $error['message'] : $error;
                $e['message']   = C('SHOW_ERROR_MSG')? $message : C('ERROR_MESSAGE');
            }
        }
        // 包含异常页面模板
        $exceptionFile =  C('TMPL_EXCEPTION_FILE',null,THINK_PATH.'Tpl/think_exception.tpl');
        include $exceptionFile;
        exit;
    }
官方函数是这样写的            //否则定向到错误页面
            $error_page         = C('ERROR_PAGE');
            if (!empty($error_page)) {
                redirect($error_page);
            } else {
                $message        = is_array($error) ? $error['message'] : $error;
                $e['message']   = C('SHOW_ERROR_MSG')? $message : C('ERROR_MESSAGE');
            }
一开始以为是没有取到配置参数 实际上并不是问题出在redirect($error_page);可以执行到这一步
但是找到这个函数 下断点 发现根本没进去 具体为啥没进去 咱就不深入研究了
我们只需要解决当前的问题
修改这句代码 //redirect($error_page);
header('HTTP/1.1 301 Moved Permanently');
header('Location: '.$error_page);
就是这么简单粗暴
然后清空缓存目录 会发现 已经跳转
评论( 相关
后面还有条评论,点击查看>>