2012-11-06 38 views
4

我正在尝试Tuckey的URLRewriter。Tuckey Urlrewriter更改JS和CSS资源的url请求

我宣布一个简单的规则,如下:

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

我希望像myapp.com/user/29请求映射到“myapp.com/user.do?id=29”。这工作正常,请求到达支持。然而,当观看GUI上的响应,这是萤火虫如何抱怨:现在有一个/用户

enter image description here

正如你所看到的,/roqket/resources之间。我不知道那是如何结束的。如果我删除<rule>它会回到正常的工作资源请求。

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

回答

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

+0

我想你的解决方案,但我有同样的问题的方式。我不明白为什么这些请求会以任何方式映射到'user' ..他们不包含单词'user'。可以在打印屏幕上看到的'user'通过过滤器以某种方式添加 – Ionut

+1

查看我的版本。我猜你的问题是什么。我希望如此;-) – jddsantaella

+0

那么..那是一个令人沮丧的日子,没有任何东西:))。这是问题。谢谢!我从来不会猜到它.. – Ionut

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

这是为了阻止tuskey URL重写过滤器请求