最稳妥方式是修改 httpd-multilang-errordoc.conf 文件中的 errordocument 404 路径(如改为 /error/404.html),确保文件位于 documentroot 下且静态资源路径正确,并同步关闭 serversignature off 和 servertokens prod,修改后需重启 apache 生效。

直接改 httpd-multilang-errordoc.conf 文件最稳妥,别动 httpd.conf 里的 ErrorDocument 行——XAMPP 默认已通过 Include 加载了多语言错误页配置,硬在主配置里覆盖反而容易被忽略或冲突。
找到并编辑 httpd-multilang-errordoc.conf
XAMPP 的错误页逻辑由 conf/extra/httpd-multilang-errordoc.conf 控制,不是 httpd.conf。路径通常是:
- Windows:
C:\xampp\apache\conf\extra\httpd-multilang-errordoc.conf - macOS/Linux:
/opt/lampp/etc/extra/httpd-multilang-errordoc.conf
打开后搜 404,你会看到类似这一行:
ErrorDocument 404 /404error.html
这就是当前 404 错误的跳转路径。它指向的是 Apache DocumentRoot 下的相对路径,比如你的 DocumentRoot 是 C:/xampp/htdocs,那实际找的就是 C:/xampp/htdocs/404error.html。
修改建议:
- 把
/404error.html换成你自己的路径,例如/error/404.html(注意开头的/,表示从 DocumentRoot 开始) - 确保对应文件真实存在,且路径中不含中文、空格或特殊符号
- 如果用了子目录(如
/error/),记得把整个error文件夹放进htdocs,别只放文件
静态资源引用必须用相对 DocumentRoot 的路径
你在 404.html 里写的 CSS、图片、JS 路径,是按 Apache 的 DocumentRoot 解析的,不是按 HTML 文件所在位置。比如:
假设 DocumentRoot 是 C:/xampp/htdocs,你把 404.html 放在 C:/xampp/htdocs/error/404.html,那么里面写 <img src="logo.png">,Apache 实际会去找 C:/xampp/htdocs/logo.png,而不是 C:/xampp/htdocs/error/logo.png。
所以有两条路可选:
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
- 所有静态资源统一放在 DocumentRoot 根下(推荐初学者)
- 改用绝对路径,比如
<img src="/error/logo.png">,前提是logo.png确实在htdocs/error/里
漏掉这点,页面能打开但样式/图片全挂,你会以为配置没生效。
改完要不要重启 Apache?
取决于你改的是什么:
- 只改了
httpd-multilang-errordoc.conf里ErrorDocument的路径 → 必须重启 Apache,否则不加载新规则 - 只改了
404.html文件内容(没动配置)→ 不用重启,刷新即可生效
验证是否生效:访问一个肯定不存在的地址,比如 http://localhost/this-page-does-not-exist,看是否跳转到你的页面。别用浏览器缓存,加个 ?t=1 强刷。
为什么关掉 ServerSignature 很重要
如果你没关 ServerSignature 和 ServerTokens,哪怕自定义了 404 页面,底部还是会显示 Apache 版本、PHP 版本等信息,形同虚设。
必须确认 httpd.conf 里这两行已显式设置(通常在文件末尾附近):
ServerSignature Off<br>ServerTokens Prod
常见坑:
- 只加了
Off,漏了ServerTokens Prod,响应头里照样暴露版本号 - 在虚拟主机块(
<virtualhost></virtualhost>)里又写了ServerTokens Full,它会覆盖全局设置 - 用 XAMPP 控制面板点 “Config” 打开的
httpd.conf是缓存副本,实际改的不是真实文件
真正生效要三验:curl 查响应头、看错误页底部、httpd -t 测语法。少一个都可能白忙。










