Java 使用Tomcat'的自定义错误页面;使用mod_jk和Apache httpd时的404页
我们有如下设置:Java 使用Tomcat'的自定义错误页面;使用mod_jk和Apache httpd时的404页,java,tomcat,httpd.conf,mod-jk,Java,Tomcat,Httpd.conf,Mod Jk,我们有如下设置: httpd <-> mod_jk (Tomcat) httpd模块jk(Tomcat) httpd被配置为将所有请求转发到URL/app*和mod_jk。 httpd配置了用于HTTP错误404、500等的自定义错误页 如果用户输入URL,http://hostname/non-existing-page-然后显示httpd的自定义404错误页面 如果用户输入URL,http://hostname/app-blabblah-然后,显示Tomcat的404错误页面
httpd <-> mod_jk (Tomcat)
httpd模块jk(Tomcat)
httpd被配置为将所有请求转发到URL/app*和mod_jk。
httpd配置了用于HTTP错误404、500等的自定义错误页
如果用户输入URL,http://hostname/non-existing-page
-然后显示httpd的自定义404错误页面
如果用户输入URL,http://hostname/app-blabblah
-然后,显示Tomcat的404错误页面。如果是类似于/app/non-existentpage的应用程序,则托管在/app的应用程序可以处理404个错误。但context/appblah不能解析为Tomcat上的任何war文件,因此会导致Tomcat的404错误页面
我们使用的是Tomcat的精简版,它的webapps文件夹只有app.war
我被要求不要显示Tomcat 404错误页面,因为它揭示了应用程序托管在Tomcat上的事实,并显示了Tomcat的版本
如果有人能告诉我如何:
更新:我正在将mod_jk workers.properties更改为仅转发/app/*到Tomcat。回答您的问题:
<error-page>
<error-code>404</error-code>
<location>/general-error.html</location>
</error-page>
404
/general-error.html
或者任何最适合你的东西。(在这里,您可以使用与应用程序相同的错误自定义页面。war和最终用户将看不到差异)
结果是: 情景1:
http://hostname/non-existing-page
- 将显示httpd错误自定义页面
http://hostname/app/non-existing-page
- 将显示应用程序app.war的错误自定义页面。(先使用$CATALINA_BASE/conf/web.xml,然后使用$CATALINA_BASE/webapps/app/web-INF/web.xml)
http://hostname/app-dummy-url
- 将显示根文件夹的Tomcat错误自定义页面。(仅使用$CATALINA_BASE/conf/web.xml)
在“编辑”中,删除了约束,现在可以: chang(e)mod_jk workers.properties仅转发/app/*到Tomcat 在这个配置中,您将获得与您想要的备选方案相同的结果:
但是,如果您仍然希望使用问题(app debug.war)中提到的调试war文件,则每次都需要修改httpd配置(worker.properties,可能还有VirtualHosts)和/或在这些文件中进行调试配置。由于它似乎不适合生产环境,因此在Tomcat中使用仅包含自定义页面的文件夹根目录似乎是最好的解决方案。请检查此链接和此链接Cheers@Devdas谢谢你的链接。正如我在文章中提到的,在“应用”上下文中任何错误的URL都会显示我们的自定义错误页面。但如果上下文名称本身是错误的,比如说“app blahblah”,那么请求将不会到达“app.war”,并且将由Tomcat处理——当Tomcat找不到任何与之匹配的上下文时,它会报告404页面——一个标准的Tomcat 404错误页面。我需要将此错误页面修改为自定义页面。您只能使用“mod_proxy”来执行此操作,只需删除mod_jk并使用带有ProxyErrorOverride指令的mod_proxy即可。是否可以添加仅显示错误的ROOT.war?谢谢您的回答。我们的产品有自定义脚本来启动Tomcat,它似乎可以在重启过程中清除Webapps目录中的所有目录。我找到了一个对ErrorReportValve的引用,它可以让我在Tomcat错误页面中隐藏服务器信息,但是我们的Tomcat版本比将标志添加到此类的版本旧。我试图修改global web.xml,它位于Tomcat的conf文件夹中,以添加ErrorPage指令-它会在浏览器上产生空白内容-我希望它可以重定向到httpd的error pages/error/http404.html。你的Tomcat版本是什么?我才意识到这件事哪儿也没提到/没人问。(还有,哪个Apache版本?)7.0.53是Tomcat版本使用自定义ErrorReportValve来显示错误页面应该与Tomcat 7一起工作。(见附件)。另一方面,当您修改$CATALIBA_BASE/conf/文件夹的web.xml时(正如我在回答中所建议的那样),它会在$CATALINA_BASE/webapps/ROOT中查找您的自定义-error-url.html页面。所以你有一张空白页,因为这里什么也找不到。如果您无法修改重新启动脚本(这会清除您的webapps文件夹,包括ROOT),那么使用自定义阀可能确实是您的解决方案。