我有一个 MV Web 应用程序正在使用 <c:url>
(或 <spring:url>
)jsp 标记在 View 中生成链接。
我的 web 应用程序当前使用上下文路径“/”进行部署,因此可以通过地址 http://mydomain
访问它。 .
现在我想使用上下文路径 /app
部署此应用程序.
访问该应用程序的新 URL 现在为 http://mydomain/app
.
我不喜欢网络用户看到部署应用程序的 contextPath 并保持 URL 干净。我现在使用 RewriteRule 将/app 附加到在访问 Tomcat 之前通过 Apache 的每个请求。
因此用户可以浏览到 http://mydomain
并且重写规则会将请求转发到部署在 contextpath /app
下的正确 Web 应用程序.
我现在遇到的问题是使用 <c:url>
该 View 在包含 contextPath 的 HTML 中生成页面链接。我试图用重写规则隐藏。
因此,在/app
下部署web应用程序后上下文 HTML 包含类似 http://mydomain/app/other/careers.html
的链接而不是http://mydomain/other/careers.html
有没有办法解决这个问题,而不必使用 <c:url>
修改所有页面?
标签库的目的正是为了管理 contextPath,以便它不会在页面中硬编码。但我的问题是,当我使用重写规则引擎时,我不再需要 HTML 页面中的此上下文路径,因为我在重写规则本身中处理它。
最佳答案
您可能想查看 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。
希望这有帮助。
关于java - 重写规则附加 webapp 上下文路径与 <spring :url> and <c:url> taglibs 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13197954/