自定义错误页面可以用您自己的品牌HTML替换服务器默认的简陋页面,同时保留真实的错误状态,让搜索引擎仍然能看到真正的404。本指南将介绍如何为每个受支持的代码添加页面、出于安全考虑会被剥离的内容,以及验证徽章的工作原理。
错误页面在KPanel中的位置
- 登录到KPanel。
- 点击左侧边栏中的网站,然后点击该站点。
- 在站点的左侧菜单中,打开设置,然后点击错误页面。
直接访问地址是/websites/<site-id>/error-pages。

为什么要费心设置
默认的服务器错误页面是一条死胡同。它没有品牌标识,没有导航,也没有任何说明,因此访问者一旦碰到它,通常就会直接离开。
自定义页面则能将其转化为引导访客重新回到站点的入口:您的徽标、您的排版风格、一句用您自己的语气写的话,以及一个返回首页或搜索框的链接。对于大型站点来说,拼写错误和过时的URL会持续产生一定的流量,而404页面是您能够建立的最廉价的挽回手段。
支持的代码
您可以为八种代码分别设置一个自定义页面,每种代码对应一个页面:
| 代码 | 含义 | 常见原因 |
|---|---|---|
| 400 | 请求错误 | 请求格式错误 |
| 401 | 未授权 | 需要身份验证或验证失败 |
| 403 | 禁止访问 | 访问规则阻止了该请求 |
| 404 | 未找到 | 该URL不存在任何内容 |
| 500 | 内部服务器错误 | 您的应用程序出现故障 |
| 502 | 网关错误 | 应用程序未正确响应 |
| 503 | 服务不可用 | 应用程序已宕机或负载过高 |
| 504 | 网关超时 | 应用程序响应时间过长 |
请先从404开始设置。它是迄今为止最常见的情况,也是访问者在正常浏览中会遇到的,而非故障导致的唯一一种。
接下来值得处理的是5xx系列,因为这些页面是人们在您最糟糕的一天看到的页面。一个冷静、有品牌感的页面,说明出了点问题并提供一个联系邮箱,要比一个空白的服务器错误页面好得多。
添加一个页面
- 点击添加错误页面。
- 从下拉菜单中选择一个错误代码。已使用的代码不会出现在列表中。
- 将HTML 正文字段中的示例HTML替换为您自己的内容。
- 点击添加错误页面。
编辑器会以一个可用的404文档作为起点,供您在此基础上进行编辑删减,如果您只是想快速得到一个整洁的页面,这是一个合理的起点。
编写HTML
请提供一份完整的HTML文档,以文档类型声明开头。该页面会按原样提供,因此必须能够独立运行。
出于安全考虑,部分HTML会在页面被存储之前被剥离:
<script>标签- 诸如
onclick之类的内联事件处理程序 - iframe
- 远程样式表
如果有任何内容被移除,保存后系统会提示警告信息。
由于远程样式表会被剥离,错误页面无法引入您站点的主CSS文件。请使用内联CSS或文档头部的<style>块来设置样式。这是刻意设计的:错误页面必须在网站其余部分出现故障时依然能够正常渲染,而一个依赖于从出故障的服务器获取资源的页面,恰恰会在最不合时宜的时刻呈现为无样式的文本。
实用建议:
- 让页面保持精简且自成一体。 将所有内容内联化。避免使用外部图片。页面列表会显示每个页面以KB为单位的大小。
- 用通俗的语言说明发生了什么。 “我们找不到该页面”要比“404 Not Found”更好。
- 提供一条出路。 一个返回首页的链接、指向主要板块的链接,或一个搜索框。
- 在5xx页面上包含联系方式,因为访问者此时无法通过网站本身联系到您。
- 不要用它来做重定向。 如果某个URL已经迁移,请正确设置重定向,而不要用这种方式。请参阅站点重定向。
状态代码会被保留
您的自定义页面会以真实的错误状态提供,而不是200。一个404自始至终对客户端都保持为404。
这一点比听起来更重要。如果品牌页面以200状态返回,那就是一种“软404”:搜索引擎会将其作为真正的页面进行索引,您的分析工具会将其计为一次成功的访问,任何工具也都不会标记出失效链接。由于KapsuleHost保留了真实状态,上述所有机制都能继续正常工作。
解读状态徽章
状态列报告的是实际能够被验证的内容,并且在限制方面刻意保持诚实。
| 徽章 | 含义 |
|---|---|
| 已验证:品牌页面已提供(真实404) | 我们从外部强制触发了一次404,并获得了带有正确状态的您的页面 |
| 已配置(未进行外部测试) | 该页面已应用。该代码无法按需从外部触发 |
| 尚未验证 | 检查尚未运行 |
| 已应用,现场测试结果不确定 | 探测得到的并非干净的404响应,通常是因为被重定向拦截了 |
| 获得了404但未提供品牌页面 | 规则已生效,但您的页面未被返回。请尝试重新保存 |
只有404可以从外部强制触发。请求一个不存在的URL可以可靠地产生404,但没有办法在不破坏服务器正常运行的情况下,按需让一个健康的服务器产生真正的500错误。因此,其他代码报告为已配置,而不会声称进行了一次从未真正发生的验证。当错误真正发生时,它们仍然会正常提供服务。
您也可能会看到一条警告,提示服务器上的另一个配置声明使用了相同的域名。在该问题解决之前,错误页面可能无法生效。如果您看到此提示,请联系支持团队。
排查实际正在出错的站点
如果您来到这里是因为您的站点正在报错,而不是想要更美观的页面,那么本页面提供了一个快捷方式:页面顶部横幅中的使用Kora排查问题按钮。
它会请求KPanel内置的助手Kora读取该站点的错误日志和近期故障记录,并告诉您可能的原因及修复方法。这比直接查看原始日志要快得多,是更理想的第一步。
关于底层的性能状况,请参阅站点性能与APM;关于一段时间内的错误率,请参阅站点流量分析。
编辑和删除
每一行都有一个编辑按钮,点击后会打开同一个编辑器,其中代码已固定,HTML内容已加载;此外还有一个删除按钮。
删除操作会要求确认,并说明结果:命中该代码的请求将回退到服务器默认页面。
故障排查
我的页面没有显示出来。 请确认您触发的是正确的代码。重定向的路径永远不会到达404状态。请使用一个确实不存在的URL进行测试,并在隐私浏览窗口中进行,以排除缓存的影响。
页面显示了,但看起来没有样式。 您的样式表作为远程资源被剥离了。请将CSS内联。
我的跟踪脚本不见了。 脚本会被设计性地剥离。目前没有办法在自定义错误页面中运行JavaScript。
所有代码都已经有页面了。 八种代码都已被使用。请编辑现有页面,而不是再添加新页面。
徽章显示品牌页面未被提供。 请重新保存该页面。如果问题仍然存在,并且没有出现域名冲突警告,请提交工单。