如何设置在Apache反向代理后面的子目录上播放?

rip*_*234 6 java apache reverse-proxy playframework

我有一个Apache 2前端,它提供两种请求:

  • 对根文件夹的请求(例如http://mysite.com/http://mysite.com/help)由apache本身(PHP/Wordpress)提供.
  • 对'/ playapp'子文件夹的特定请求将转发到Play!通过mod-proxy通过反向代理:

MOD-proxy.conf

ProxyPass        /playapp/ http://localhost:9000/
ProxyPassReverse /playapp/ http://localhost:9000/
Run Code Online (Sandbox Code Playgroud)

最终结果是请求说http://mysite.com/playapp/Controller/action到达Play服务器http://localhost:9000/Controller/action

现在,玩!正确提供页面,但所有链接,包括javascript,css和其他页面的链接都被破坏.例如,如果视图使用:

#{stylesheet 'style.css' /}
Run Code Online (Sandbox Code Playgroud)

然后渲染的结果是

<link rel="stylesheet" type="text/css" href="/public/stylesheets/style.css" charset="utf-8" ></link>
Run Code Online (Sandbox Code Playgroud)

所以最终用户尝试抓取http://mysite.com/public/stylesheets/style.css,返回404,因为它实际上不是Play的一部分!应用程序.

在这里配置Apache + Play的正确方法是什么?

我正在寻找的结果是Play!在最终呈现的HTML中返回诸如此类的URL(或者可能为Apache重写URL):http://mysite.com/playapp/public/stylesheets/style.css

此外,我确实需要一些能力链接Play应用程序之外.例如,我希望将主路由(/)映射到我的绝对根(http://mysite.com/),而不是Play的根.

Ste*_*ano 3

首先,有一点很重要:apache2 无法(轻松)更改页面中的链接。因此 Play 必须已经提供了正确的内容。

使用子域将使所有这些完全透明,但让我们解决您的问题。

你的问题确实有两点,

修复静态资源的子文件夹

使用刚刚设置的路线

GET /playapp/public/ staticDir:public

您正在使用http.path吗?

我认为反向应该考虑到这一点......

外部链接

  • 另外,我确实需要一些在 Play 应用程序之外进行链接的能力。例如,我希望将主路由 (/) 映射到我的绝对根 (http://mysite.com/),而不是 Play 的根。

嗯,这听起来很简单:如果它在播放应用程序之外,那么您没有使用反向网址,因此只需将绝对路径放入链接中...或者您是否使用反向网址?如果是这样,你能举个例子吗?