如何通过Tomcat配置为特定部署应用设置维护跳转页面?
当然可以!仅靠Tomcat自带配置就能搞定
不用改一行应用代码,就能精准拦截单个应用的所有请求,重定向到维护静态页。下面给你最实用的两种实现方式:
方案一:用RewriteValve(推荐,灵活好管控)
这是Tomcat官方提供的URL重写工具,专门用来处理这类请求路由需求,步骤超简单:
找对配置文件:
- 如果你能修改应用包,就在应用的
META-INF目录下新建/编辑context.xml - 要是不想碰应用包,就去Tomcat的
conf/Catalina/[你的主机名]/[应用上下文名].xml(比如localhost下的myapp.xml)
- 如果你能修改应用包,就在应用的
写入重写规则:
在<Context>标签里加这段配置,记得把your-app换成你的应用路径,maintenance.html换成你准备的维护页面路径:
<Context> <Valve className="org.apache.catalina.valves.rewrite.RewriteValve"> <!-- 排除维护页面本身,防止无限循环重定向 --> <RewriteCond %{REQUEST_URI} !^/your-app/maintenance.html$ <!-- 把所有其他请求重定向到维护页,返回503(服务不可用)状态码 --> <RewriteRule ^(.*)$ /your-app/maintenance.html [R=503,L] </Valve> </Context>
- 准备维护页面:
在应用的web根目录放个maintenance.html,内容随便写,比如:
<!DOCTYPE html> <html> <head> <title>维护通知</title> <style>body {text-align: center; margin-top: 100px;}</style> </head> <body> <h1>📢 应用正在计划维护</h1> <p>我们会尽快恢复服务,感谢您的耐心等待!</p> </body> </html>
- 生效配置:
重启Tomcat,或者在Tomcat管理后台reload这个应用就行。
方案二:用Error Page + 请求拦截(适合极简场景)
如果不想用重写规则,也可以通过错误页面配置实现:
- 修改应用的web.xml:
在<web-app>里加这段,把503错误指向维护页:
<error-page> <error-code>503</error-code> <location>/maintenance.html</location> </error-page>
- 添加拦截Valve:
同样在Context配置文件里加这个Valve,让所有请求都返回503错误,触发上面的错误页面:
<Context> <Valve className="org.apache.catalina.valves.ErrorReportValve"> <Override> public void invoke(Request request, Response response) throws IOException, ServletException { response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE); } </Override> </Context>
不过这个方法需要写一点点Java代码片段,不如方案一省心,所以优先推荐方案一。
小提示
- 用
503状态码是行业标准,搜索引擎会识别并暂停抓取,比普通的302重定向更合适。 - 维护完之后,只要把Context里的Valve配置注释掉,reload应用就恢复正常了,超方便。
- RewriteValve从Tomcat7开始就自带了,现在大部分环境都是Tomcat8及以上,直接用就行。
内容的提问来源于stack exchange,提问作者Himangshu Pramanik
相关产品推荐
相关产品推荐

