Liferay主题中JS和CSS的绝对URL在代理后面引起问题

时间:2014-03-07 04:50:35

标签: liferay liferay-theme

我们都知道我们可以在主题portal_normal.vm中包含自定义JS / CSS:

<script type="text/javascript" src="$javascript_folder/custom.js" charset="utf-8"></script>
<link type="text/css" rel="stylesheet" src="$css_folder/your_custom.css"></link>

变量$javascript_folder$css_folder都会产生绝对网址。 http://content.liferay.com/4.3/misc/theme-api-4.3.0.html

在我的情况下,liferay在代理服务器后面运行,因此,这些绝对URL导致我遇到麻烦,js / css文件没有被加载到浏览器中。

不仅使用这些速度变量添加的文件,而且其他一些与主题相关的文件(main.cssmain.js)也不会加载到带有服务器绝对URL的浏览器中。

有没有办法强制主题使用相对URL而不是绝对?

由于

2 个答案:

答案 0 :(得分:0)

绝对URL一般都是Liferay的巨大痛苦。您能否在portal-ext.properties中指定属性:

  • web.server.host
  • web.server.protocol
  • web.server.port

如果是这样可能会对您有所帮助 - 它应该使绝对路径尊重您的代理配置。认为并非总是可行 - 例如,当您需要通过代理和直接访问LR实例时(例如,考虑内联网与外联网)。

答案 1 :(得分:0)

如果您正在使用Apache的mod_proxy并通过http转发,我建议您查看ProxyPreserveHost On指令。这会将实际使用的主机名转发给tomcat(因此,Liferay)。

另一个选择是使用mod_jk或mod_proxy_ajp - 它们通过ajp协议转发流量,该协议会自动执行此操作。

简而言之:除非另有配置(请参阅pdolega的回答)Liferay将使用已发出请求的主机名。这是由Tomcat决定的。如果tomcat只获取内部主机的代理请求,那就是它解析的内容。

但有一点需要注意的是,有时候没有请求(例如在后台任务,电子邮件等),并且可能值得在两端使用相同的主机名:想想留言板帖子的电子邮件通知:如果这样转到内联网和互联网用户,你希望这些主机名是同时发送给两种用户的链接。