ThinkPHP拦截404

Thinkphp3.2.3拦截404请求

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

要实现在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秒钟后再跳转回原来的页面。

答案参考ChatGPT Plus版,整理汇总。希望能帮助你解决问题

要在ThinkPHP 3.2.3中拦截404请求并显示自定义的404页面,您可以按照以下步骤进行操作:

  1. 在项目的Application/Home/Controller目录下创建一个新的控制器文件,例如命名为ErrorController.class.php

  2. ErrorController类中添加一个名为_empty的方法,该方法会拦截所有不存在的页面请求。方法的代码如下:

    <?php
    namespace Home\Controller;
    use Think\Controller;
    
    class ErrorController extends Controller {
    
        public function _empty() {
            // 显示自定义的404页面
            $this->display('Public/404');
        }
    
    }
    
  3. Application/Home/View/Public目录下创建一个名为404.html的模板文件,作为自定义的404页面内容。

  4. 在配置文件Application/Common/Conf/config.php中添加以下配置,指定默认错误页面和错误处理控制器:

    <?php
    return array(
        // ...
        'TMPL_EXCEPTION_FILE' => APP_PATH . 'Home/View/Public/404.html', // 指定默认错误页面
        'ERROR_PAGE'          => 'Home/Error/_empty', // 指定错误处理控制器和方法
        // ...
    );
    
  5. 完成上述步骤后,当访问不存在的页面时,将会显示您定义的自定义404页面。

请确保您的文件路径和命名与上述代码一致,并将自定义的404页面放置在正确的位置。另外,请根据您的实际情况进行适当调整和修改代码。

在前端使用JavaScript拦截404请求并快速跳转到其他页面可能不是最佳实践,因为这样可能会导致浏览器在短时间内频繁跳转页面,给用户带来不好的体验。更好的方式是在服务器端进行404页面的处理,为用户提供友好的错误提示和导航选项。