1

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

我的 webapp 目前使用上下文路径“/”部署,因此可以在 address 访问http://mydomain

现在我想用 contextpath 部署这个应用程序/app

访问应用程序的新 URL 现在是http://mydomain/app

我不希望 Web 用户看到部署应用程序的 contextPath 并保持 URL 干净。我现在使用 RewriteRule 将 /app 附加到每个通过 Apache 的请求,然后再点击 Tomcat。

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

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

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

有没有办法解决这个问题而不必修改所有页面使用<c:url>

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

4

1 回答 1

1

您可能想在http://tukey.org/urlrewrite/上查看 UrlRewriteFilter

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

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

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

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

希望这会有所帮助。

于 2012-11-02T17:16:48.787 回答