为啥在 Spring 中使用 Url Rewrite Filter?

Posted

技术标签:

【中文标题】为啥在 Spring 中使用 Url Rewrite Filter?【英文标题】:Why use a Url Rewrite Filter in Spring?为什么在 Spring 中使用 Url Rewrite Filter? 【发布时间】:2011-04-03 06:03:51 【问题描述】:

我正在使用的 Spring 应用程序声明了一个 Tuckey UrlReWrite 过滤器,然后设置如下重写规则:

<rule>
    <from>^/(.*)$</from>
    <to last="true">/app/$1</to>
</rule>

为什么要这样做?

Spring 是否无法识别未转到 /app/ url 的请求?

否则这个重定向有什么好处?

【问题讨论】:

【参考方案1】:

假设您希望 Spring MVC 的 DispatcherServlet 处理应用程序中的所有 URL,不包括静态内容的 URL。如果您尝试直接使用&lt;url-pattern&gt;/&lt;/url-pattern&gt; 执行此操作,此映射将优先于静态内容。

使用重写过滤器,您可以为静态内容指定排除项,如下所示:

<urlrewrite default-match-type="wildcard">
    <rule>
        <from>/staticContentHere/**</from>
        <to>/staticContentHere/$1</to>
    </rule>
    <rule>
        <from>/**</from>
        <to>/app/$1</to>
    </rule>    
</urlrewrite>

编辑: 请注意,自 Spring 3.0.4 以来,有一个 &lt;mvc:resources /&gt; 声明。使用此声明,DispatcherServlet 将提供来自 web 应用程序的 /resources 子文件夹的静态内容,因此不需要重写(请参阅 http://blog.springsource.com/2010/07/22/spring-mvc-3-showcase/)。

【讨论】:

以上是关于为啥在 Spring 中使用 Url Rewrite Filter?的主要内容,如果未能解决你的问题,请参考以下文章

springmvc的问题,URL分号之后的内容读不到这是为啥呢?

为啥在入口点 url 中添加项目名称时出现 404

为啥 Spring Boot 由于 URL 未规范化而拒绝 GET 请求? [复制]

为啥“anonymousUser”Spring Security的认证

在 URL 中隐藏 .html [重复]

使用 mod_rewrite 从 url 中删除页面 id