梦月寰宇 2023-05-24 11:08 采纳率: 100%
浏览 13
已结题

ThinkPHP拦截404

Thinkphp3.2.3拦截404请求

开发过程中,如果某个页面不存在,经常会显示错误信息,想要定义一个拦截这个错误信息,只显示自定义的404页面,该怎么定义,在Home下。使用前端js拦截不显示404页面,会快速跳转到404之后的页面

  • 写回答

3条回答 默认 最新

  • 掩月天权 2023-05-24 11:11
    关注

    要实现在ThinkPHP3.2.3中拦截404错误,并跳转到自定义的404页面,然后在5秒钟后再跳转回原来的页面,可以按照以下步骤进行:

    打开Application/Common/Conf/config.php文件,添加以下配置:

    // 添加默认错误页面的配置信息
    'TMPL_EXCEPTION_FILE' => APP_PATH . 'Home/View/Public/error.html',
    

    其中,APP_PATH指向网站根目录,在这里假设默认错误页面的路径为Home/View/Public/error.html。

    在Application/Home/Controller/IndexController.class.php文件中添加以下代码:

    public function _empty()
    {
        // 判断是否为404错误
        if (strtolower(ACTION_NAME) == 'index') {
            // 定义跳转链接
            $url = $_SERVER['HTTP_REFERER'] ?? '/';
            // 跳转到自定义404页面
            $this->redirect('/404.html', [], 0, '页面不存在,正在为您跳转···');
            // 5秒后自动跳转回原来的页面
            echo "<script>setTimeout(function(){location.href='{$url}'},5000);</script>";
        }
    }
    

    当访问的页面不存在时,_empty()方法会被调用。该方法首先判断当前是否为404错误,如果是,则获取跳转链接(即当前页面的来源地址),然后使用$this->redirect()方法将用户重定向到自定义的404页面。注意,这里的第三个参数指定了跳转时间为0,即不延迟跳转。接下来,使用JavaScript代码在页面上显示“正在为您跳转···”的提示信息,并在5秒后自动跳转回原来的页面。

    在public目录下创建一个名为404.html的文件,并编写自定义的404页面内容。
    至此,您已经成功实现了在ThinkPHP3.2.3中拦截404错误,并跳转到自定义的404页面,并在5秒钟后再跳转回原来的页面。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 创建了问题 5月24日