如何使用jetty RewriteRegexRule修改URL的查询字符串

时间:2011-06-28 07:09:42

标签: jetty url-rewriting

我试图在Jetty中使用url重写功能来实现搜索友好的URL。该应用程序以前使用isapi dll在IIS上运行以执行URL重写。在该上下文中,路径信息将其作为查询字符串参数插入。

当我尝试在jetty中做同样的事情时,我得到一个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 个答案:

答案 0 :(得分:1)

据我所知,在使用Jetty执行重写时无法修改查询字符串。可以在进行重定向时,但这不符合我的要求。

另一种选择是Tuckey url重写过滤器。它有效,但在Jetty上使用它时表单数据会丢失。

最后,我搬到了Glassfish,Tuckey过滤器运行良好。

答案 1 :(得分:0)

在Jetty 8.1停止查询字符串工作之前,RewriteRegexRule是错误的。

以下是我为升级Jetty 7设置而采取的步骤:

1)下载Jetty 8.1.5的副本并提取到合适的位置。

2)从现有的Jetty 7安装中复制配置

3)收到愚蠢的错误java.lang.String cannot be cast to org.eclipse.jetty.xml.XmlParser$Node

4)在上下文配置中查找mailing list thread识别问题为缺少DOCTYPE。

5)在<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">行前<?xml...行之后放置<Context...

6)将适用于Railo CFML Servlet的jar文件复制到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的lib/ext/slf4j-api.jar,这显然与Jetty使用的东西发生冲突。

9)Jetty启动但由于另一个错误而拒绝处理上下文:java.lang.NoSuchMethodError: org.objectweb.asm.ClassReader.accept

10)寻找与org.objectweb.asm相关的jar;在lib/annotations找到它;记得在start.ini中看到与注释相关的设置;禁用注释。

11)Jetty最终成功启动并启用了上下文。

12)停止Jetty,恢复原始重写规则,重启;它有效!


现在看看让per-context rewriting工作......