ProxyPass、带有资源链接的 ServletContext 名称未按预期工作

ProxyPass, ServletContext name with resource links not working as expected

好的,我有一个 spring MVC 网络应用程序打包为 www-coolapp.war 并部署到 tomcat 服务器。我有一个域名 www.coolap.com,我想将所有来自 localhost:8080/www-coolapp 的请求映射到 www.coolap.com。在我的 apache 配置中,我在虚拟主机中使用了以下内容

ProxyRequests                   off
ProxyPreserveHost               on
ProxyPass                       / http://localhost:8080/www-coolapp/
ProxyPassReverse                / http://localhost:8080/www-coolapp/
ProxyPassReverseCookiePath      /www-coolapp /

除资源目录中的文件外,这基本上可以正常工作。在我的 spring 上下文中,我将资源配置为

<mvc:resources mapping="/resources/**" location="/resources/" />

在我的 JSP 文件中,我使用 <c:url> 声明链接,它将 servlet 上下文名称添加到 URL 的开头。

<link href="<c:url value="/resources/css/bootstrap.min.css"/>" rel="stylesheet">
<link href="<c:url value="/resources/css/font-awesome.min.css"/>" rel="stylesheet">

部署到服务器这些转化为

<link href="/www-coolapp/resources/css/bootstrap.min.css" rel="stylesheet">
<link href="/www-coolapp/resources/css/font-awesome.min.css" rel="stylesheet">

无法正确呈现,即链接到资源中的文件(css、图像、javascript 等)是基于路径前面的 servlet 上下文名称的断开链接。

有没有办法修改代理设置或重写 url 以使其工作而不更改 webapp 中的所有链接?

知道了 - 根据 jstl 文档,添加 context 属性会覆盖 servlet 上下文名称,现在链接可以使用 ProxyPass 配置正确解析。

<a href="<c:url context="/" value="..."/>">Lint Text</a>

可能应该在发帖前睡一觉...