当前位置: 首页 > 知识库问答 >
问题:

使用mod_jk和Apache httpd时,为Tomcat的404页面使用自定义错误页面

濮嘉茂
2023-03-14

我们有这样的设置:

httpd <-> mod_jk (Tomcat)

http pd被配置为将所有请求转发到URL /app*以mod_jk。http pd被配置为HTTP错误404、500等的自定义错误页面。

如果用户输入 URL,http://hostname/non-existing-page - 则会显示 httpd 的自定义 404 错误页面。

如果用户输入URL,<code>http://hostname/app-blabblah-然后,将显示Tomcat的404错误页面。托管在/app上的应用程序可以处理404个错误,如果它类似于/app/non-existentpage。但是context/appblablah无法解析Tomcat上的任何war文件,因此导致Tomcat的404错误页面。

我们正在使用精简版的Tomcat,它的webapps文件夹只有app.war

我被要求不要显示Tomcat 404错误页面,因为它揭示了应用程序托管在Tomcat上的事实,并且还显示Tomcat的版本。

如果有人能告诉我如何:

    < li >当Tomcat必须处理代表不存在的上下文的URL时,为其添加自定义404错误页面。 < li >或者配置httpd,以便如果它发现Tomcat返回404错误,它会呈现自己的自定义404错误页面。

PS:我不能随意只将 /app/* 指向mod_jk,因为我们有时会出于调试目的部署以 app 开头的其他战争 - 例如.app-debug.war。

更新:我正在更改mod_jk工作人员。属性只转发/app/*到Tomcat。

共有2个答案

太叔航
2023-03-14

如果您已经将tomcat与apache集成并使用mod_jk,那么请使用下面的步骤404和401自定义错误页。

所有步骤都在下面的链接中提到。

https://devo pstech 2020 . blogspot . com/2021/07/use-custom-error-page-for-tomcats-404 . html

弘柏
2023-03-14

要回答您的问题:

    < li >当Tomcat必须处理代表不存在的上下文的URL时,为其添加自定义404错误页面。

并尊重您的初始约束:

我不能随意仅将 /app/* 指向mod_jk,因为我们有时会出于调试目的部署以 app 开头的其他战争 - 例如.app-debug.war。

最简单的解决方案是使用ROOT webapp文件夹。然而,为了尊重你的其他条件,保持你的webapps文件夹最简单,你不需要在你的ROOT webapp文件夹中保留任何东西,只需要保留你的自定义错误页面。

使用此配置,您只需添加$CATALINA_BASE/conf/web.xml

<error-page>
  <error-code>404</error-code>
  <location>/general-error.html</location>
</error-page>

或任何最适合您想要的东西。(在这里,您可以使用与 app.war 相同的错误自定义页面,最终用户不会看到差异)。

结果是:

情况1:http://hostname/non-existing-page

    < li >将显示httpd错误自定义页面

情况2:< code > http://hostname/app/non-existing-page

  • 应用程序应用程序的错误自定义页面。战争将被展示。(使用$CATALINA_BASE/conf/web.xml,然后使用$CATALINA_BASE/webapps/app/web-INF/web.xml)

情况3:http://hostname/app-dummy-url

    < li >将显示您的根文件夹的Tomcat错误自定义页面。(只使用$CATALINA_BASE/conf/web.xml)。

在您的编辑中,您删除了约束,现在可以:

chang(e) mod_jk workers.properties 仅将 /app/* 转发给 Tomcat。

那么在这种配置中,您将获得与您想要的替代方案相同的结果:

但是,如果您仍然希望使用您在问题中提到的调试war文件(app-debug.war ),您将需要每次都修改您的httpd配置(worker.properties,可能还有您的VirtualHosts ),并且/或者在这些文件中进行调试配置。因为它似乎不适合生产环境,所以在Tomcat中使用只包含自定义页面的文件夹根似乎是这里的最佳解决方案。

 类似资料:
  • 问题内容: 在我的Spring Boot应用程序中,我试图配置自定义错误页面,例如404,我在应用程序配置中添加了以下Bean: 此外,我还创建了以下简单的Thymeleaf模板: 并将其添加到文件夹中。现在,在404错误上,我只能看到白屏。 我在做什么错以及如何正确设置404页面?此外,是否可以将模板而不是仅将静态页面用于自定义错误页面? 问题答案: 在Spring Boot 1.4.x中,你可

  • 在我的Spring Boot应用程序中,我试图配置自定义错误页,例如,对于404,我在应用程序配置中添加了以下Bean: 此外,我还创建了以下简单的Thymeleaf模板: 并将其添加到文件夹中。现在关于404错误,我只能看到白色屏幕。 我做错了什么?如何正确设置404页面?另外,是否可以使用模板而不仅仅是静态页面来定制错误页面?

  • 这应该很简单。我修改了项目的web.xml,以便显示我自己的500错误页面: 然后我写了最简单的servlet来测试它: 然后完全忽略自定义页面(位于根目录),而是获得默认的 Tomcat 错误页面。 我使用的是MyEclipse调试器附带的Tomcat 6版本。我已经三重检查了拼写错误,但我找不到任何异常。我想知道错误页面标签是否需要在文档的某个部分。有谁知道可能出了什么问题? *编辑:这是请求

  • 本文向大家介绍在Tomcat中配置404自定义错误页面详解,包括了在Tomcat中配置404自定义错误页面详解的使用技巧和注意事项,需要的朋友参考一下 一直使用tomcat,今天想到一个问题,自定义404错误页面, 为了获得很好的用户感受,是不应当向用户暴露404这样的页面的, 问题的出发点是我在Struts2中定义错误页面, 在Struts2中是这样定义的: 这就是说在访问action是.如果没

  • 问题内容: 完全按照此处找到的教程进行操作,我无法创建自定义500或404错误页面。如果我确实输入了错误的网址,则该页面会显示默认的错误页面。有什么我应该检查的内容,以防止显示自定义页面? 文件目录: 在mysite / settings.py中,我启用了以下功能: 在mysite / polls / urls.py中: 我可以发布任何其他必要的代码,但是如果我使用了错误的网址,应该如何更改以获得

  • Flask 自带了很顺手的 abort() 函数用于以一个 HTTP 失败代码 中断一个请求,他也会提供一个非常简单的错误页面,用于提供一些基础的描述。 这个页面太朴素了以至于缺乏一点灵气。 依赖于错误代码的不同,用户看到某个错误的可能性大小也不同。 通常的错误代码 下面列出了一些用户经常遇到的错误代码,即使在这个应用准确无误的情况下也可能发生: 404 Not Found 经典的“哎呦,您输入的