UrlRewriteFilter с Glassfish

Как я могу интегрировать перезапись URL-адресов в свой сервер Glassfish v3?

Причина, по которой я хочу это знать, заключается в том, что я развертываю приложение PHP на своем сервере Glassfish с помощью Quercus.

Но Quercus полагается на mod_rewrite на сервере Apache для обеспечения перезаписи URL-адресов, а это недоступно в Glassfish.


person Barry    schedule 09.07.2010    source источник
comment
возможный дубликат переписать URL на Glassfish с помощью Quercus PHP   -  person Pascal Thivent    schedule 10.07.2010


Ответы (2)


Ну, у вас есть два варианта:

  • либо перед вашим экземпляром GlassFish с Apache и используйте mod_rewrite
  • или используйте фильтр перезаписи URL от Tuckey.

Я предполагаю, что первое не вариант (иначе вы бы не публиковали этот вопрос). Что касается последнего, вы можете адаптировать решение, приведенное в Drupal на Glassfish с чистыми URL-адресами с использованием фильтра перезаписи URL. По сути, вам придется:

  • Получите войну Quercus и распакуйте ее
  • Загрузите фильтр и распакуйте его внутри Quercus (это поместит банку фильтра внутрь WEB-INF/lib, а urlrewrite.xml под WEB-INF)
  • Объявить фильтр в web.xml (см. инструкцию)
  • "Перенесите" ваши правила перезаписи в файл urlrewrite.xml
  • переупаковать и развернуть войну (или развернуть как взорванный архив)
person Pascal Thivent    schedule 09.07.2010

Я искал ответ на этот вопрос в течение нескольких недель. Следуйте этим инструкциям для JBoss: http://tapomay.blogspot.com/2011/11/clean-urls-with-drupal-urlrewritefilter.html

Он ссылается на статью, в которой это было сделано для Tomcat: http://www.brianshowalter.com/blog/running_drupal_on_quercus

Короче говоря, вы хотите переписать URL-адрес только в том случае, если запрошенный файл или каталог не существует в системе. Вот почему просто UrlRewriteFilter недостаточно. Вы должны добавить фильтр класса в UrlRewriteFilter, чтобы проверить это.

В инструкциях, на которые я ссылался, используется более старая версия UrlRewriteFilter (3.2.0), она, вероятно, работает так же хорошо с более новой версией (я сделал это с 3.2.0).

Вы будете использовать это в сочетании с фильтром классов (для этого есть репозиторий проекта Google, спасибо автору связанной статьи, по адресу https://code.google.com/p/drupalrewritefilter/ )

В инструкциях сказано добавить файлы в Eclipse, но я использовал Netbeans (просто запустите новый проект с существующими исходными кодами).

Вам нужно будет добавить servlet.api.jar (где-то в вашей системе, если у вас установлен J2EE) и файл UrleRewriteFilter.jar, который вы используете, в путь к классам для сборки.

Поместите полученный файл drupalrewritefilter.jar и файл UrlRewriteFilter.jar, который вы используете, в WEB-INF/lib.

Ваш WEB-INF/web.xml должен иметь эту директиву фильтра:

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    <init-param>
        <param-name>logLevel</param-name>
        <param-value>TRACE</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Используйте это вместо того, что веб-сайт для UrlRewriteFilter говорит использовать.

ПРИМЕЧАНИЕ. Установка Quercus содержит тег DOCTYPE в начале для Servlet API 2.2 или 2.3. Но тег <filter> есть в Servlet API 2.4 или выше. Ваше приложение выдаст ошибку, если вы не свяжетесь с новым DTD API сервера или (что я и сделал) просто не удалите тег DOCTYPE целиком.

Затем у вас должен быть WEB-INF/urlwrite.xml с:

<?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>
    <class-rule class="com.brianshowalter.drupalrewrite.DrupalRule" />
</urlrewrite>

Перезагрузите приложение drupal, а затем включите чистые URL-адреса.

person Tim Hawes    schedule 02.09.2012