Tomcat и редиректы

Понадобилось мне однажды сделать редиректы ссылок на Web-сервере под управлением Apache Tomcat. Не включая головы создал .htaccess, прописал всё что нужно, а не работает. Оказалось, что если включить голову, то для работы .htaccess придется перед Apache Tomcat поднять еще и Apache HTTPD, настроить mod_jk и тогда всё заработает, но это сложно (и голову включать, и сервис поднимать, прим авт.).

В решении проблемы как всегда помог google, и по банальному запросу одним из первых нашелся данный ресурс.

Порядок установки очень прост:

  1. Копируем файл urlrewritefilter-4.0.3.jar в WEB-INF/lib директорию сервлета
  2. Правим файл 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>
  3. Создаем файл 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>
  4. Всё.

 

Несколько пояснений:

В первом пункте имеется в виду директория конкретного приложения, т.е. для jspui интерфейса DSpace, к примеру это может быть что-то типа webapps/jspui/WEB-INF/lib
Во втором пункте /* означает что перехватываться будут все ссылки, для DSpace можно заменить /* на /handle или /bitstream в зависимости от задачи
В третьем пункте правил может быть больше одного, так же желательно не использовать взаимоисключающие и/или уточняющие правила, тут с порядком как у acl’ов не сработает

Ну и естественно, всё это можно реализовать на этапе сборки, jar файл добавить в зависимости, а xml’ку из третьего пункта сложить в исходники примерно сюда src/main/webapp/WEB-INF/

Ну и напоследок, сходите таки по ссылке, там написано то же самое и даже больше, да и версия редиректора обновиться могла 🙂

 

Запись опубликована в рубрике Программки с метками . Добавьте в закладки постоянную ссылку.

8 комментариев на «Tomcat и редиректы»

  1. Иван говорит:

    Собственно а чем штатный механизм томкэта не устроил?

    Даже удобнее, потому как ничего ставить не надо — все уже есть и поддерживается:

    Регистрация нового пользователя
    registration
    /WEB-INF/JSP/registration.jsp

    registration
    /registration/*

  2. Иван говорит:

    съелись тэги.
    в общем в начале стандартное объявление сервлета через тег servlet в web.xml
    в во втором случае тег servlet-mapping

  3. woodyfon говорит:

    В процессе тестирования установки не забываем перезапустить tomcat7 и очистить кэш браузера.

  4. Уведомление: Tomcat+letswncrypt под Windows и немножечко DSpace | ideafix.name

  5. Дрон говорит:

    Если 30* редиректы, то придётся, наверное, писать фильтр. Сам пока не нашёл простого решения этой проблемы. Вдобавок, задача вообще нетривиальная:
    1. IP клиента один — нет редиректа;
    2. IP клиента другой — есть редирект.
    По листам доступа фильтр.

Добавить комментарий для Иван Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *