Apache mod_jk 未加载 CSS

Apache mod_jk not loading CSS

我正在使用 linux 服务器和 CentOS 7,安装了 mod jk 的 Apache 2.4.23。 mod jk 已正确安装和配置,可打开站点但未加载该站点的 css。

我也尝试过各种重写规则,但问题仍然存在。

以下是我在 httpd.conf 中为 mod_jk

使用的配置

RewriteRule ^/(.*)$ /test/ [PT]

JkMount /* test

worker.properties:

worker.list=test 

worker.test.type=ajp13 
worker.test.host=localhost 
worker.test.port=8009 

所有mod_jk配置在httpd.conf中,CSS在Tomcat

未对 Tomcat 的上下文文件进行任何更改。

server.xml

shutdown port = 8005
http port = 8080
ajp port = 8009

谢谢

在 apache 服务器中添加所有 html、图像和 css 文件夹,在 tomcat/webapps/project/WEB-INF/classes 中添加 java 类,一切都会开始正常工作

这是项目结构

link rel="stylesheet" href="${pageContext.request.contextPath}/resources/css/style.css" type="text/css"

您无法访问您的 css,因为 link 不正确。

根据您的项目结构,您的 css 在:project_root/webapp/resources/style.css,访问它的 link 应该是 http://[host:port]/resources/style.css.

您输入的 css url 不是这个,而是:

"${pageContext.request.contextPath}/resources/css/style.css"

它应该在哪里:

"${pageContext.request.contextPath}/resources/style.css"

如果您在 css link 中更改此参数,我打赌它会按预期返回。

另一件事是直接从 Apache Httpd(或任何其他 Web 服务器)而不是从 Tomcat 提供 css、js 和其他静态内容是否方便。对此有不同的意见,特别是如果您向 Tomcat 提供 Apache APR 库。我个人比较喜欢。在这种情况下,在您 copied/moved/redirect 通过将您的静态元素别名为 Apache 之后,您的 JKMount 策略应该更加复杂。这可能是一种方法:

JkMount /test/* test
JkUnMount /test/resources/* test

编辑:

我一直在查看您的配置,我终于意识到问题实际上是您正在使用的 RewriteRule。

RewriteRule ^/(.*)$ /test/ [PT] 实际做的是将每个请求重写到该主机(或虚拟主机),因此将额外的 /test/ 上下文路径添加到请求路径的开头。

它对第一个请求工作正常,所以它需要 http://server.com/ request and rewrites it to http://server.com/test/。在它之后,JKMount 将请求重定向到 tomcat,因为它将每个 mach 重定向到 test worker,并且当您应用通用表达式 (/*) 时,每个请求都被重定向到tomcat.

所以,第一个请求是这样的:

http://server.com/ > http://server.com/test/

但是您 Tomcat 应用程序中的任何后续资源或 link(包括 css 资源)实际上都会正确设置 /test/ 上下文(至少 css 你正在尝试加载)。因此,css link /test/resources/css/style.css 也被重写,并以这种方式结束: /test/test/resources/css/style.css 这是不正确的 url.

现在,为了避免这种情况,我的建议是将您的 RewriteRule 更改为仅管理对根元素的调用,这样:

RewriteRule ^/$ /test/ [PT]

如果你这样做,只是对 http://server.com/ will be rewritten to http://server.com/test 的初始请求,以及任何后续资源,link 或表单操作,因为你的整个应用程序由 spring mvc 管理, 将已经在 uri

中具有 /test 上下文路径映射