ThinkPHP 5.0/5.1 自定义404界面的配置
★ 背景
还要啥背景,就是觉得不可能用框架自带的 404 界面呗.
可能跟之前的版本配置方法有点区别,在此做一下简单的笔记
框架:ThinkPHP 5.1,ThinkPHP5.0.20
★ 配置过程
♩. 修改 config.app 文件
第一,需要关闭调试模式
// 应用调试模式
'app_debug' => false,
一般在项目的开发过程中,可以设置为"true",但是项目上线部署后,一定要关闭调试模式
第二,增加或修改配置项: http_exception_template
如果是 ThinkPHP.5.0 框架,进行修改如下:
'http_exception_template' => [
// 定义404错误的重定向页面地址
404 => APP_PATH . 'index/view/exception_html/404.html',
500 => APP_PATH . 'index/view/exception_html500.html',
],
如果是 ThinkPHP.5.1 框架,进行修改如下:
//TODO 自定义异常请求码的页面配置 建议只做非500错误页面
'http_exception_template' =>
[
404 => Env::get('app_path') . 'index/view/exception_html/404.html',
500 => Env::get('app_path') . 'index/view/exception_html/500.html',
],
上面的路径配置,对应的文件路径是这样的,同理可以扩展添加其他的请求码配置页:

♪. 静态资源的引用
这一点其实没必要讲,我只是给一个参考
为了项目的界面设计统一性,至少头部尾部都是一致的,以我为例,将自定义页面的静态文件都放置在了 public/errors 目录下

★ 演示效果
在自己的项目链接中,随意输入不能访问的链接,则会出现配置的 404 界面,其他同理显示

★ 500不支持
①. 探讨参考
根据以上的操作,其实并不能匹配响应出 500 页面
追索源码发现跟 Handle 中的 render() 方法有关,进一步分析代码,应该是 **500 ** 情况不能实例化 HttpException 的原因
原本试着修改了如下图中的对应代码,但是 框架默认将出错数据都认为了是 500 异常报错,这样一来就不能 debug 正常调试程序代码了

源代码参考如下:
if ($e instanceof HttpException) {
return $this->renderHttpException($e);
} else {
$response = $this->convertExceptionToResponse($e);
$code = $response->getCode();
if ($code == 500){
$e = new HttpException(500,'The server is dead !',$e);
return $this->renderHttpException($e);
}else{
return $this->convertExceptionToResponse($e);
}
//修改前
//return $this->convertExceptionToResponse($e);
}
极不建议修改框架核心源代码,指不定又会整出来多少安全隐患,此处只是一个小提示而已!仅做了解即可…
②. 另一种解决方案
修改 config.app 文件中的配置项 exception_tmpl,线上和线下可分开配置
//TODO 异常页面的模板文件,主要作为500或程序报错的处理页面
//此为生产模式下(线下)的配置操作,便于代码排错
'exception_tmpl' => Env::get('think_path') . 'tpl/think_exception.tpl',
//此为线上模式下的配置操作,便于隐藏内部错误数据,人性化显示
//'exception_tmpl' => Env::get('think_path') . 'tpl/self_exception.html',
对于上述的配置项,主要是制定好显示页面即可,源框架中是 tpl 文件,此处我直接复制了一个静态页面的源代码而已,具体的动态显示可以自己进行优化补充 …
③. 显示效果
如果是在线下的测试环境,app_debug 开启,同时 exception_tmpl 为前者配置项,只要在控制器中随便写一点错误代码,就会出现500报错,则效果如下:

如果是在线上的外网环境,app_debug 关闭,同时 exception_tmpl 为后者配置项,如此一来, 报错页面如下:

★ 附录
♩ 推荐学习
ThinkPHP5 开发文档异常处理
关于thinkphp5手动抛出Http异常时自定义404页面报错的问题
♪ 动态设置模板
如果针对不同的客户端情况可以动态设置模板,比如类似如下的代码形式
if (request()->isMobile()) {
config('template.view_path','application\\index\\view\\wap\\');
} else {
config('template.view_path','');
}
ThinkPHP 5.0/5.1 自定义404界面的配置的更多相关文章
- thinkphp 5.0如何实现自定义404(异常处理)页面
404页面是客户端在浏览网页时,由于服务器无法正常提供信息,或是服务器无法回应,且不知道原因所返回的页面.404承载着用户体验与SEO优化的重任.404页面通常为用户访问了网站上不存在或已删除的页面, ...
- 通过修改 Apache 的配置文件 htaccess 文件实现自定义404页面
最近在学习使用Apache服务器的配置,做一个记录. Apache下有个.htaccess文件,是Apache的一个特殊的配置文件.这个配置文件默认是没有的,要手动在各自的项目的根目录编写才行. 要实 ...
- GithubPage自定义腾讯404界面
思路来源 之前看到腾讯网络的404和github自带的404,反差很大,于是想自己弄一个了. 过程 github的404一点也不复杂,只是需要在根目录添加一个404.html的文档,或者404.md的 ...
- tomcat项目发布 更改小猫图标 及自定义错误404界面
tomcat发布项目的时候遇到些小问题 不过解决了 问题1. 整个服务器的404自定义界面问题 解决方法: 在tomcat安装目录下conf中web.xml中修改配置文件 <error-page ...
- swift3.0自定义相机界面
这是公司上上上一个项目的自定义相机界面,原来是swift2.0写的,今天改为swift3.0,记录一下. 效果图如下: ...
- ThinkPHP自定义成功界面、失败界面、异常界面
在ThinkPHP的手册中,附录里边的配置参考,有一个模板引擎设置. 或者在手册里面的控制器,跳转和重定向里面. 紧接着,就讲到了如何自定义这些界面. 将上诉的配置参数写到到配置文件里,修改路径到自己 ...
- 以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转)
以前编写的inno setup脚本,涵盖了自定义安装界面,调用dll等等应用 (转) ; Script generated by the Inno Setup 脚本向导. ; SEE THE DOCU ...
- Wix 安装部署教程(三)自定义安装界面和行为
接上一篇自定义安装界面,这篇继续探索,首先介绍下,Wix为我们定义了五种风格,每种风格的UI都是有一定顺序的.我们可以改变安装顺序,也可以完全自定义一个Dialog插入其中.比如Wix_Mondo 风 ...
- Web Design:欧美人形剪影的404界面
项目需求,必须得写个404界面,比较愁,因为网站属于那种电商+艺术品拍卖的网站,404界面不太好设计 很多时候网站直接代码报错输出404,不过设计过的404也有好处,比如改进用户体验.增强互动性之类的 ...
随机推荐
- Navicat:实现两个数据库结构同步和数据库对比
Navicat版本:Navicat Premium 12 选择 工具 ——> 结构同步 选择源数据库和目标数据库,选择完成后点击右下角对比按钮 要修改的对象:源数据库和目标数据库中都有的 ...
- 入门级 JAVA反射机制
1.什么是反射? Java中的反射机制是Java语言的一个很重要的特性,是Java “动态性” 的重要体现.Java反射机制让我们在程序运行状态中,对于任意一个类,都能知道这个类的所有属性和方法:对于 ...
- 从壹开始前后端分离 40 || 完美基于AOP的接口性能分析
旁白音:本文是不定时更新的.net core,当前主线任务的Nuxt+VueAdmin教程的 nuxt.js 之 tibug项目已上线,大家可以玩一玩:http://123.206.33.109:70 ...
- arcgis api 4.x for js 结合 react 入门开发系列初探篇(附源码下载)
你还在使用 JQuery 或者 Dojo 框架开发 arcgis api 4.x for js 吗?想试试模块化开发吗?随着前端技术的发展,arcgis api 4.x for js 也有了结合 re ...
- shell 简单脚本编程
shell脚本编程 编译器,解释器 编程语言: 机器语言,汇编语言,高级语言 静态语言:编译型语言 强类型(变量) 事先转换成可执行格式 C,C++,JAVA,C# 动态语言:解释型语言,on the ...
- July 08th. 2018, Week 28th. Sunday
Make each day your masterpiece. 让生命中的每一天都成为杰作. From John Wooden. Try to focus on what we are doing r ...
- 手机web——自适应网页设计(html/css控制)【转】
一. 允许网页宽度自动调整: "自适应网页设计"到底是怎么做到的?其实并不难. 首先,在网页代码的头部,加入一行viewport元标签. <meta name="v ...
- Mysql事务开启方式(客户端+java手动+Spring Boot)
一:概念 作为单个逻辑单元执行一系列操作,要么完全执行,要么完全不执行.举例 我们需要向数据库插入3条数据(我们希望这三条数据要么全部插入成功,要么全部失败), 比如第一条数据插入成功,插入第二条数据 ...
- 日吞吐万亿,腾讯云时序数据库CTSDB解密
一.背景 随着移动互联网.物联网.大数据等行业的高速发展,数据在持续的以指数级的速度增长,比如我们使用手机访问互网络时的行为数据,各种可穿戴设备上报的状态数据,工厂中设备传感器采集的指标数据,传统互联 ...
- python接口自动化(五)--接口测试用例和接口测试报告模板(详解)
简介 当今社会在测试领域,接口测试已经越来越多的被提及,被重视,而且现在好多招聘信息要对接口测试提出要求.区别于传统意义上的系统级别测试,很多测试人员在接触到接口测试的时候,也许对测试执行还可以比较顺 ...