java - Tuckey Urlrewriter 更改 JS 和 CSS 资源的 url 请求

标签 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>它会回到正常的工作资源请求。

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

最佳答案

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/

相关文章:

java - 为什么 tuckey UrlRewriteFilter 出站规则映射不起作用?

java - 为什么Tuckey UrlRewrite Filter在规则匹配后不调用chain.doFilter?

java - URLrewrite 过滤器中的过滤器链

java - 可比接口(interface)取决于大小?

java - Swagger 不扫描位于不同 jar 文件中的实体类中的 ApiModel 和 ApiModelProperty 注释

java - 如何在 J2EE 中进行动态 URL 重写

c# - URL 重写博客文章地址的最佳实践是什么?

java - 在 toast 上显示整数

java - 使用 google 请求时出现 url 错误 403 (java)

url-rewriting - 在 Yii2 中隐藏 URL 中的网页