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页面,您可以按照以下步骤进行操作:
在项目的Application/Home/Controller
目录下创建一个新的控制器文件,例如命名为ErrorController.class.php
。
在ErrorController
类中添加一个名为_empty
的方法,该方法会拦截所有不存在的页面请求。方法的代码如下:
<?php
namespace Home\Controller;
use Think\Controller;
class ErrorController extends Controller {
public function _empty() {
// 显示自定义的404页面
$this->display('Public/404');
}
}
在Application/Home/View/Public
目录下创建一个名为404.html
的模板文件,作为自定义的404页面内容。
在配置文件Application/Common/Conf/config.php
中添加以下配置,指定默认错误页面和错误处理控制器:
<?php
return array(
// ...
'TMPL_EXCEPTION_FILE' => APP_PATH . 'Home/View/Public/404.html', // 指定默认错误页面
'ERROR_PAGE' => 'Home/Error/_empty', // 指定错误处理控制器和方法
// ...
);
完成上述步骤后,当访问不存在的页面时,将会显示您定义的自定义404页面。
请确保您的文件路径和命名与上述代码一致,并将自定义的404页面放置在正确的位置。另外,请根据您的实际情况进行适当调整和修改代码。
在前端使用JavaScript拦截404请求并快速跳转到其他页面可能不是最佳实践,因为这样可能会导致浏览器在短时间内频繁跳转页面,给用户带来不好的体验。更好的方式是在服务器端进行404页面的处理,为用户提供友好的错误提示和导航选项。
web浏览器端
手机移动端:
这样就完成了,至于状态码当然是 404了,因为thinkphp默认不存在的页面返回404,大功告成!