我有一个相对简单的 Apache httpd + Tomcat via mod_jk 设置,运行良好,但我需要让 Tomcat 处理某些 404 情况。基本上,httpd 服务将处理图像和 PDF 文件以及偶尔的 IIS 黑客攻击尝试。然而,PDF 文件实际上是由 Tomcat 创建的,稍后会从文件系统中删除,有些人已将这些易变 PDF 文档的链接放在网络上。这会导致 404 消息,而我真正想要的是让用户看到生成 PDF 的表单。
当然,我可以让 Tomcat 处理所有 404 错误:
错误文档 404 /404.jsp
但是它们太多了,Tomcat 只看到 404.jsp,它不知道原始 URL 是什么。我需要的是:
- httpd 继续提供所有图像、PDF 等。
- 如果 PDF 文件缺失,则通过 mod_jk 发送该请求。对于所有其他类型,它将继续使用自己的 404 进行响应。
- Tomcat 确定 PDF 的真实来源并将用户转发到该页面。
如果不进行太多的 .conf 操作,是否可以做到这一点?
答案1
您可以制作智能 404 jsp,用于查看引用 URL 并根据 jsp 中的某些逻辑重定向请求,或通过 javascript 重定向。如果引用者的 URL 中有 .pdf,则解析 URL 并将用户重定向到正确的表单,假设您可以根据请求的 pdf 查找所需的表单。
答案2
如果 PDF 实际上是在 Web 服务器上生成的,并且在那里停留一段时间以等待 apache 提供服务,则尝试对所有以“.pdf”结尾的不存在的文件使用 mod_rewrite,并将请求重写到 jsp。假设您不会再次创建具有相同名称的文件(在这种情况下,不要使用永久重定向)(还假设您没有以下形式的 URL,/foo.pdf?specialjuice=1
因为下面的 RewriteRule 将丢失特殊功能):
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*\.pdf)$ /generateform.jsp?oldurl=$1 [R=301,L]
任何不存在的内容都应获取常规 404 处理程序。