我在JSF2中有应用程序(使用Primefaces)。我使用h:outputStylesheet
将URL解析为资源,因此指向CSS的链接如下所示:
/project/javax.faces.resource/style.css.xhtml?ln=css
当我在服务器上的tomcat上部署项目时,一切正常。将URL放入浏览器时,我可以看到CSS文件:
http://myserver.com:8080/project/javax.faces.resource/style.css.xhtml?ln=css
当然,我也可以使用直接URL来访问它,例如:
http://myserver.com:8080/project/resources/css/style.css
当我配置apache将来自端口80的请求转发到tomcat时,问题就开始了。我尝试了两种方法:
使用mod_jk的ajp
使用mod_proxy的ajp
当作为jsf资源访问时,这两种配置都会生成无效的CSS文件。当我放:
http://myserver.com/project/javax.faces.resource/style.css.xhtml?ln=css
我收到以下错误消息:
This page contains the following errors:
error on line 1 at column 1: Document is empty
Below is a rendering of the page up to the first error.
但是,指向我的CSS文件的直接url仍然有效:
http://myserver.com/project/resources/css/style.css
我的问题是:我在ajp配置中错过了什么?
这是配置:
ajp工人:
worker.list=ajp13_worker
worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
使用JK的ajp连接:
JkMount /project/ ajp13_worker
JkMount /project ajp13_worker
JkMount /project/* ajp13_worker
使用代理的替代ajp连接:
ProxyPass /project/ ajp://127.0.0.1:8009/project/
ProxyPassReverse /project/ http://127.0.0.1:80/project/
Tomcat服务器.xml
<Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="8443" />
我用:
雄猫7
Java 8
Primefaces 4.0
最佳答案
如BalusC所述,问题是apache将内容类型设置为application/xhtml+xml
,并且应该为text/css
。设置了xml类型是因为apache中的mod_mime模块已打开。最简单的解决方案是删除xhtml的文件扩展名和内容类型之间的映射。这可以通过添加以下内容来完成:
RemoveType xhtml
apache配置中的行。
在此处可以找到更多解决方案:https://serverfault.com/questions/544723/how-to-set-different-mod-mime-rules-for-reverse-proxy