我有一个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页面中的这个上下文路径,因为我在重写规则本身中处理它。
答案 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。
希望这会有所帮助。