我正在尝试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>
,它将恢复正常的工作资源请求。
答案 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重写过滤器停止请求的方法