Proxy 使用Apache作为代理时,无法使用playframework为静态资源生成正确的URL
我使用Apache服务器作为playframework应用程序的代理。代理配置文件如下所示:Proxy 使用Apache作为代理时,无法使用playframework为静态资源生成正确的URL,proxy,playframework,reverse-proxy,Proxy,Playframework,Reverse Proxy,我使用Apache服务器作为playframework应用程序的代理。代理配置文件如下所示: > <VirtualHost *:80> > ProxyPreserveHost Off > ServerAdmin redhorse@viform.net > DocumentRoot "/home/admin/www" > ServerName viform.net > ErrorLog "logs/viform
> <VirtualHost *:80>
> ProxyPreserveHost Off
> ServerAdmin redhorse@viform.net
> DocumentRoot "/home/admin/www"
> ServerName viform.net
> ErrorLog "logs/viform.net-error.log"
> ProxyPass /zh-cn/ http://localhost:9000/
> ProxyPassReverse /zh-cn/ http://localhost:9000/
> </VirtualHost>
...
<script type="text/javascript" src="/public/javascripts/base.js">
</script>
<script type="text/javascript" src="/public/javascripts/secure/submitbutton.js">
</script>
<script type="text/javascript" src="/public/javascripts/secure/signinpanel.js">
</script>
...
http.path=/ch-cn
>
>代理主机关闭
>服务器管理员redhorse@viform.net
>DocumentRoot“/home/admin/www”
>ServerName viform.net
>ErrorLog“logs/viform.net error.log”
>ProxyPass/zh cn/http://localhost:9000/
>ProxyPassReverse/zh cn/http://localhost:9000/
>
当我访问时,它会显示正确的页面。但是页面中静态资源的URL不正确。生成的html页面代码如下所示:
> <VirtualHost *:80>
> ProxyPreserveHost Off
> ServerAdmin redhorse@viform.net
> DocumentRoot "/home/admin/www"
> ServerName viform.net
> ErrorLog "logs/viform.net-error.log"
> ProxyPass /zh-cn/ http://localhost:9000/
> ProxyPassReverse /zh-cn/ http://localhost:9000/
> </VirtualHost>
...
<script type="text/javascript" src="/public/javascripts/base.js">
</script>
<script type="text/javascript" src="/public/javascripts/secure/submitbutton.js">
</script>
<script type="text/javascript" src="/public/javascripts/secure/signinpanel.js">
</script>
...
http.path=/ch-cn
。。。
...
浏览器找不到这些资源,因为它们的src路径应以“/zh cn”开头。
有人能帮我解决这个问题吗?谢谢。游戏组中有一些关于这个主题的帖子,还有另一个类似的问题 如果查看上的这篇文章,您将看到预期的配置是在路由文件中指定上下文。例如
%{ ctx = play.configuration.getProperty('ctx', '') }%
GET ${ctx}/ Application.index
GET ${ctx}/hello Application.hello
您将在应用程序配置文件中放置以下内容
ctx=zh-cn
从play-1.2.2开始,conf/application.conf中有一个名为
http.path
在您的示例中,尝试如下设置:
> <VirtualHost *:80>
> ProxyPreserveHost Off
> ServerAdmin redhorse@viform.net
> DocumentRoot "/home/admin/www"
> ServerName viform.net
> ErrorLog "logs/viform.net-error.log"
> ProxyPass /zh-cn/ http://localhost:9000/
> ProxyPassReverse /zh-cn/ http://localhost:9000/
> </VirtualHost>
...
<script type="text/javascript" src="/public/javascripts/base.js">
</script>
<script type="text/javascript" src="/public/javascripts/secure/submitbutton.js">
</script>
<script type="text/javascript" src="/public/javascripts/secure/signinpanel.js">
</script>
...
http.path=/ch-cn
它应该可以工作。如果在Apache配置文件中将ProxyPreserveHost设置为Off,那么在这种情况下,代理将正常工作,而无需修改routes文件。但是生成的html代码将是不正确的,就像我遇到的一样。你的解决方案可以解决我的问题。我更改视图文件中的代码如下:
感谢您的快速响应。