Revel自定义404页面必须启用prod模式,模板路径为app/views/errors/404.html,conf/app.conf中需在[prod]区块配置results.error.404 = 404.html,且模板须继承header/footer布局。

Revel自定义404页面必须设为prod模式
Revel只在run.mode = prod下才启用自定义错误页逻辑,dev模式下无论怎么配都会直接返回带堆栈的调试页或空白。打开conf/app.conf,确认[prod]区块下有这一行:run.mode = prod,且没有被注释。改完后必须重启应用——终端输出看到Running in prod mode才算生效。
404模板路径和文件名不能错
Revel硬编码识别app/views/errors/404.html这个路径,不接受任何变体:
-
errors/404.html→ ✅ 正确(相对app/views/) -
app/views/errors/404.html→ ❌ 错误(绝对路径不识别) -
errors/not-found.html→ ❌ 错误(文件名必须是404.html) -
errors/404.tpl→ ❌ 错误(后缀只能是.html)
如果app/views/errors/目录不存在,得手动创建——Revel不会自动建这个子目录,漏掉就等于没配。
app.conf里results.error.404配置要严格对齐
在conf/app.conf的[prod]区块下,必须写成:results.error.404 = 404.html。注意三点:
- 等号两侧必须有空格,
results.error.404=404.html会被忽略 - 值必须是
404.html,不能带路径前缀 - 该配置项不能出现在
[dev]区块下(dev模式下它压根不生效)
404模板必须继承标准布局结构
直接写纯HTML会导致CSS丢失、导航栏消失,因为Revel的404.html不是独立页面,而是嵌入主布局的片段。最简可行模板长这样:
{{set . "title" "Page Not Found"}}{{template "header.html" .}}<div class="error-container">
<h1>Oops! You're lost.</h1>
<p>The page you requested doesn't exist.</p>
<a href="/">Go Home</a>
</div>{{template "footer.html" .}}
关键点:
-
{{set . "title" ...}}必须放在最开头,否则header.html里{{.title}}取不到值 -
{{template "header.html" .}}和{{template "footer.html" .}}必须显式调用,不能省略 - 不要在
{{define}}块外直接写内容,否则会被布局模板丢弃
真正容易被忽略的是:所有这些配置都只影响404,不影响500或其他错误;若要定制500页,得额外加results.error.500 = 500.html并照着同样规则放模板。











