Tomcat9配置ErrorReportValve实现404跳转首页时如何将状态码改为200
你现在使用的ErrorReportValve是Tomcat专门用来处理错误响应的组件,它的设计逻辑就是仅替换错误响应的返回内容,不会修改原始的HTTP状态码,所以不管你配置的错误页是什么,都会保留原有的404状态码。
要实现返回200的需求,推荐用下面两种方案:
方案一:使用RewriteValve实现(推荐)
这是适配性最好的方案,适合前后端分离、单页应用等需要把不存在路径转发到首页的场景:
- 先删除你之前在
server.xml中添加的ErrorReportValve配置(如果其他错误码的处理还要保留,就只删掉errorCode.404那一行即可) - 在
server.xml对应的<Host>节点下添加重写阀门配置:
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />
- 在
webapps/ROOT/目录下新建WEB-INF文件夹(已存在则跳过),在文件夹内创建rewrite.config文件,写入以下规则:
# 仅当请求的文件/目录不存在时重写到首页 RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^ /index.html [L]
配置完成后重启Tomcat即可,所有不存在路径的请求都会直接返回首页内容,状态码为200。
方案二:修改现有错误页设置状态码
如果你不想调整现有阀门配置,可以把静态首页改成动态页面主动修改状态码:
- 将
webapps/ROOT/index.html重命名为index.jsp - 在
index.jsp文件的最顶部添加一行代码:
<% response.setStatus(200); %>
- 修改你之前
ErrorReportValve里的404配置为:
errorCode.404="webapps/ROOT/index.jsp"
重启Tomcat后即可生效。
内容的提问来源于stack exchange,提问作者Dean.Wen
相关产品推荐
相关产品推荐

