Как использовать jetty RewriteRegexRule для изменения строки запроса URL - PullRequest
1 голос
/ 28 июня 2011

Я пытаюсь использовать функцию перезаписи URL в Jetty для реализации удобных для поиска URL. Ранее приложение работало на IIS с использованием isapi dll для перезаписи URL. В этом контексте он будет принимать информацию о пути и вставлять ее в качестве параметра строки запроса.

Когда я пытаюсь сделать то же самое на пристани, я получаю 404. Если я пропускаю строку запроса, тогда перезапись работает, но в ней отсутствует критическая информация. Есть ли параметр в RewriteRegexRule, чтобы он повторно обрабатывал строку запроса?

Неработающим примером будет

<Call name="addRule">
  <Arg>
    <New class="org.eclipse.jetty.rewrite.handler.RewriteRegexRule">
      <Set name="regex">(/.*)</Set>
      <Set name="replacement">/index.cfm?path=$1</Set>
    </New>
  </Arg>
</Call>

Удалить? и последующая строка запроса, и это работает.

Ответы [ 2 ]

1 голос
/ 14 июля 2011

Насколько я могу судить, невозможно изменить строку запроса при выполнении перезаписи с Jetty.Это возможно при перенаправлении, но это не соответствует моим требованиям.

Альтернативой является фильтр перезаписи URL Tuckey.Это работает, но данные формы теряются при использовании его на Jetty.

В конце я перешел на Glassfish, на котором хорошо работает фильтр Tuckey.

0 голосов
/ 25 августа 2012

RewriteRegexRule был глючным до того, как Jetty 8.1 не позволил строке запроса работать.

Вот шаги, которые я предпринял для обновления моей установки Jetty 7:

1) Скачать копию Jetty8.1.5 и извлеките в подходящее место.

2) Скопируйте через конфигурацию из существующей установки Jetty 7

3) Получите глупую ошибку java.lang.String cannot be cast to org.eclipse.jetty.xml.XmlParser$Node

4) Найти поток рассылки определение проблемы как отсутствующего DOCTYPE в контекстных конфигах.

5) Поместить <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> после <?xml... строки перед <Context... строкой.

6) Скопировать соответствующий файлфайлы для Railo CFML Servlet в каталог lib/ext.

7) Получите загадочную ошибку: Caused by: java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lo rg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/la

8) Отключите Railo's lib/ext/slf4j-api.jar, который явно конфликтует с чем-то, что использует Jetty.

9) Jetty запускается, но отказывается обрабатывать контекст из-за другой ошибки: java.lang.NoSuchMethodError: org.objectweb.asm.ClassReader.accept

10) Ищите jar, связанный с org.objectweb.asm;найдите его в lib/annotations;не забудьте увидеть настройки, связанные с аннотациями в start.ini;отключить аннотации.

11) Наконец, Jetty успешно запускается и включает контекст.

12) Остановите Jetty, восстановите исходное правило перезаписи, перезапустите;это работает!

Теперь посмотрим, как работает перезапись контекста работает ...

...