symfony 2.8.52 自定义 404 页面需在 prod 环境下,将模板命名为 error404.html.twig 并置于 app/resources/twigbundle/views/exception/ 目录,同时确保使用 app.php 入口、清空 prod 缓存。

Symfony 2.8.52 中自定义 404 页面,核心是替换默认的异常模板,并确保环境配置正确。它不依赖路由或控制器,而是通过 Twig 模板文件 + 环境开关来生效。
确认使用的是 prod 环境
Symfony 默认只在生产环境(prod)下显示自定义错误页;开发环境(dev)强制启用调试器(Debug Toolbar + Exception page),这是设计行为,不是配置错误。
- 检查 app.php 是否被用作入口(而非 app_dev.php)
- 确认 app/config/config.yml 中
kernel.environment值为prod - 清空缓存:
php app/console cache:clear --env=prod(必须加--env=prod)
创建 404.html.twig 模板
把自定义页面放在标准路径下,Symfony 会自动识别:
- 路径:app/Resources/TwigBundle/views/Exception/error404.html.twig
- 注意命名:必须是
error404.html.twig(不是 404.html.twig,也不是 error.html.twig) - 可继承基础模板,例如:
{% extends '::base.html.twig' %} - 模板内可使用变量:
{{ status_text }}、{{ status_code }}、{{ exception.message }}(仅在 debug=false 时部分可用)
验证是否生效的快捷方式
避免反复切换环境,推荐以下组合操作:
- 临时将 app/app.php 中的
debug参数设为false - 访问一个明显不存在的 URL,如
/this-route-does-not-exist - 若仍看到 Symfony 调试页,说明请求实际走的是
app_dev.php—— 检查 Web 服务器重写规则或浏览器是否缓存了重定向
补充:静态资源 404 不走此模板
直接请求 /css/missing.css 或 /images/logo.png 这类静态文件时,404 由 Web 服务器(Apache/Nginx)直接返回,Symfony 完全不介入。此时需单独配置 Web 服务器的 ErrorDocument 404 或 error_page 指令指向你的 HTML 页面。











