Понадобилось мне однажды сделать редиректы ссылок на Web-сервере под управлением Apache Tomcat. Не включая головы создал .htaccess, прописал всё что нужно, а не работает. Оказалось, что если включить голову, то для работы .htaccess придется перед Apache Tomcat поднять еще и Apache HTTPD, настроить mod_jk и тогда всё заработает, но это сложно (и голову включать, и сервис поднимать, прим авт.).
В решении проблемы как всегда помог google, и по банальному запросу одним из первых нашелся данный ресурс.
Порядок установки очень прост:
- Копируем файл urlrewritefilter-4.0.3.jar в WEB-INF/lib директорию сервлета
- Правим файл WEB-INF/web.xml такой добавкой:
<filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
- Создаем файл urlrewrite.xml WEB-INF/lib директории сервлета и пишем в нем что-то такое:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN" "http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd"> <urlrewrite> <rule> <note> The rule means that requests to /123 will be redirected to /321 the url will be rewritten. </note> <from>/123</from> <to type="redirect">/321</to> </rule> </urlrewrite>
- Всё.
Несколько пояснений:
В первом пункте имеется в виду директория конкретного приложения, т.е. для jspui интерфейса DSpace, к примеру это может быть что-то типа webapps/jspui/WEB-INF/lib
Во втором пункте /* означает что перехватываться будут все ссылки, для DSpace можно заменить /* на /handle или /bitstream в зависимости от задачи
В третьем пункте правил может быть больше одного, так же желательно не использовать взаимоисключающие и/или уточняющие правила, тут с порядком как у acl’ов не сработает
Ну и естественно, всё это можно реализовать на этапе сборки, jar файл добавить в зависимости, а xml’ку из третьего пункта сложить в исходники примерно сюда src/main/webapp/WEB-INF/
Ну и напоследок, сходите таки по ссылке, там написано то же самое и даже больше, да и версия редиректора обновиться могла 🙂
Собственно а чем штатный механизм томкэта не устроил?
Даже удобнее, потому как ничего ставить не надо — все уже есть и поддерживается:
Регистрация нового пользователя
registration
/WEB-INF/JSP/registration.jsp
…
registration
/registration/*
съелись тэги.
в общем в начале стандартное объявление сервлета через тег servlet в web.xml
в во втором случае тег servlet-mapping
Мне не сервлеты мапить нужно, а 30*-ые редиректы делать — это немного другое.
В процессе тестирования установки не забываем перезапустить tomcat7 и очистить кэш браузера.
Так tomcat ребутать при изменении web.xml — это как-бы норма…
Уведомление: Tomcat+letswncrypt под Windows и немножечко DSpace | ideafix.name
Если 30* редиректы, то придётся, наверное, писать фильтр. Сам пока не нашёл простого решения этой проблемы. Вдобавок, задача вообще нетривиальная:
1. IP клиента один — нет редиректа;
2. IP клиента другой — есть редирект.
По листам доступа фильтр.
у самого томкета начиная с 8 версии есть апи для редиректов, он чуть понятнее чем urlrewrite
Уведомление: Tomcat+letsencrypt под Windows и немножечко DSpace | ideafix.su