Назад | Перейти на главную страницу

Apache + mod_jk и конкретный обработчик 404

У меня есть относительно простая установка Apache httpd + Tomcat через mod_jk, которая работает хорошо, но мне нужно, чтобы Tomcat обрабатывал определенные условия 404. По сути, служба httpd будет обрабатывать изображения и файлы PDF, а также случайные попытки взлома IIS. Однако файлы PDF фактически создаются Tomcat и позже удаляются из файловой системы, и некоторые люди разместили ссылки на эти изменчивые документы PDF в Интернете. Это приводит к 404 сообщениям, когда я действительно хочу, чтобы пользователь видел форму, из которой был создан PDF-файл.

Конечно, я могу заставить Tomcat обрабатывать все ошибки 404:

ErrorDocument 404 /404.jsp

Но их слишком много, и Tomcat просто видит 404.jsp, он не знает, какой был исходный URL. Что мне нужно:

  1. httpd продолжает обслуживать все изображения, PDF-файлы и т. д.
  2. если файл PDF отсутствует, отправьте этот запрос через mod_jk. Для всех остальных типов он продолжает отвечать собственным 404.
  3. Tomcat определяет, откуда на самом деле пришел PDF-файл, и перенаправляет пользователя на эту страницу.

Это можно сделать без слишком большого количества операций с .conf?

Если PDF-файл на самом деле создается на веб-сервере и некоторое время находится там, чтобы его обслуживал apache, попробуйте использовать mod_rewrite для всех несуществующих файлов, которые заканчиваются на «.pdf», и переписать запрос в jsp. Предполагая, что вы не создаете файл с тем же именем снова (в этом случае не используйте постоянное перенаправление) (Также предполагая, что у вас нет URL-адресов формы /foo.pdf?specialjuice=1 так как RewriteRule ниже потеряет специальный сок):

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*\.pdf)$ /generateform.jsp?oldurl=$1 [R=301,L]

Все, что не существует, должно получить обычный обработчик 404.

Вы можете создать smart 404 jsps, который использует просмотр URL-адреса ссылки и перенаправляет запрос на основе некоторой логики в jsp или перенаправляет через javascript. Если в URL-адресе реферера есть .pdf, проанализируйте URL-адрес и перенаправьте пользователя в нужную форму, предполагая, что вы можете найти нужную форму на основе запрошенного PDF-файла.