У меня есть относительно простая установка 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. Что мне нужно:
Это можно сделать без слишком большого количества операций с .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-файла.