Tuckey Urlrewriter更改了对JS& CSS资源

时间:2012-11-06 13:57:03

标签: java url-rewriting tuckey-urlrewrite-filter

我正在尝试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抱怨的方式:

enter image description here

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

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

2 个答案:

答案 0 :(得分: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

看看这个doc

答案 1 :(得分:0)

<rule>
<condition type="request-uri" operator="notequal">\.(images|gif|jpeg|png|css|js|pdf|doc|ico|jsp|jpg)$</condition>
<from>............

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