我正在试用 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>
它会回到正常的工作资源请求。
你能帮帮我吗?我错过了什么?谢谢!
最佳答案
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 .
关于java - Tuckey Urlrewriter 更改 JS 和 CSS 资源的 url 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13252577/