4

我正在尝试 Tuckey 的 URLRewriter。

我声明了一个简单的规则,如下所示:

<rule>
    <from>/user/([0-9]+)$</from>
    <to>/user.do?id=$1</to>
</rule>

我希望将请求myapp.com/user/29映射到“myapp.com/user.do?id=29”。这工作正常,请求到达支持。然而,当在 GUI 上查看响应时,Firebug 是这样抱怨的:

在此处输入图像描述

如您所见,现在之间/roqket/resources一个/user。我不知道那是怎么结束的。如果我删除它,<rule>它会恢复正常的工作资源请求。

你能帮助我吗?我错过了什么?谢谢!

4

2 回答 2

1

你需要为js、style和img定义其他过滤器。

像这样的东西:

<rule>
    <from>/img/**</from>
    <to>/img/$1</to>
</rule>
<rule>
    <from>/js/**</from>
    <to>/js/$1</to>
</rule>
<rule>
    <from>/style/**</from>
    <to>/style/$1</to>
</rule>

这些过滤器应该在您为用户定义的过滤器之前声明。这些规则将在应用于过滤器的规则之前匹配,并且您的问题应该得到解决。

编辑.

关于您的评论:过滤器以某种方式添加了可以在打印屏幕中看到的用户

我认为这是不正确的,我的意思是,过滤器不是将“用户”添加到过滤器的过滤器。我认为问题在于您如何导入资源。

可能,你正在做这样的事情:

<script type="text/javascript" language="javascript" src="resources/js/lang.js"></script>

在此示例中,查看相对 URI 如何不满足您的应用程序上下文并且不以斜杠开头。当您使用这样的 URL 时,浏览器将在相对于实际路径的路径中查找资源。如果您在浏览器http://localhost:8080/roqlet/user中有结果将是http://localhost:8080/roqket/user/theResource(假设“roqket”是您的应用程序上下文)。

所以,你应该这样做:

<c:set var="ctx" value="${pageContext.request.contextPath}"/>

<script type="text/javascript" language="javascript" src="${ctx}/resources/js/lang.js"></script>

现在,您指出上下文,URI 将相对于它而不是实际构建:http://localhost:8080/roqket/theResource

看看这个文档

于 2012-11-06T14:04:16.887 回答
0
<rule>
<condition type="request-uri" operator="notequal">\.(images|gif|jpeg|png|css|js|pdf|doc|ico|jsp|jpg)$</condition>
<from>............

这是停止来自 tuskey url 重写过滤器的请求的方法

于 2012-11-29T10:40:36.040 回答