Proxy 使用Apache作为代理时,无法使用playframework为静态资源生成正确的URL

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

我使用Apache服务器作为playframework应用程序的代理。代理配置文件如下所示:

> <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代码将是不正确的,就像我遇到的一样。你的解决方案可以解决我的问题。我更改视图文件中的代码如下:
感谢您的快速响应。