java - 重写规则附加 webapp 上下文路径与 <spring :url> and <c:url> taglibs 冲突

标签 java spring-mvc nginx jstl taglib

我有一个 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/

相关文章:

java - 从java调用带有特殊字符的url

java - 在 Docker 容器中运行时,高 I/O Java 进程始终在 JavaThread 中获取信号 11 SIGSEGV

java - 如何在 Angularjs 中对字符串进行编码?

java - Web 应用程序中的 Spring beans 作用域。最佳实践

ubuntu - HHVM 已安装,但根据 error.log,环境中缺少类型检查器

python - uwsgi_params 文件应该放在哪里,它的扩展名是什么?

nginx - 建立相对于新路径的链接

java - 如何实现每个节点都是一个类的堆?

java - 方法抛出 'org.hibernate.LazyInitializationException' 异常

java - 使用java在elasticsearch查询中设置索引类型