重写规则追加webapp上下文路径与<spring:url>和<c:url> taglibs </c:url> </spring:url>冲突

时间:2012-11-02 15:10:09

标签: java spring-mvc nginx jstl taglib

我有一个MV webapp,它使用<c:url>(或<spring:url>)jsp标记在视图中生成链接。

我的webapp目前部署了上下文路径“/”,因此可以通过地址http://mydomain访问。

现在我想使用contextpath /app部署此应用程序。

到达该应用的新网址现在为http://mydomain/app

我不希望网络用户看到部署应用程序的contextPath并保持URL清洁。我现在正在使用RewriteRule将/ app附加到每个通过Apache的请求,然后才能访问Tomcat。

因此,用户可以浏览到http://mydomain,重写规则会将请求转发到在contextpath /app下部署的正确的webapp。

我现在的问题是使用<c:url>视图会在HTML中生成包含contextPath的页面链接。我试图隐藏重写规则。

因此,在/app上下文下部署网络应用后,HTML包含http://mydomain/app/other/careers.html而不是http://mydomain/other/careers.html等链接

有没有办法解决这个问题,而无需使用<c:url>修改所有页面?

taglib的目的正是为了管理contextPath,以便在页面中不对其进行硬编码。但我的问题是,当我使用重写规则引擎时,我不再需要HTML页面中的这个上下文路径,因为我在重写规则本身中处理它。

1 个答案:

答案 0 :(得分:1)

您可以在http://tuckey.org/urlrewrite/

查看UrlRewriteFilter

使用此项目,您可以操纵入站出站链接,后者是通过修改c:url后面的调用结果来完成的。用于确定如何构建URL的场景。

当前版本的文档似乎有点令人费解,但<outboud-rule>https://cdn.rawgit.com/paultuckey/urlrewritefilter/master/src/doc/manual/4.0/index.html#outbound-rule)元素是您要自动修改所有页面链接的内容。

如果您只对所有链接使用c:url,则只需添加UrlRewriteFilter而无需更改单个页面。

根据您的整体设置,UrlRewriteFilter还可以处理传入的重写(独立于出站链接进行配置),因此可能不需要mod_rewrite。

希望这会有所帮助。