Java 如何定义要从生产中的不同子目录提供的播放资源和API?

Java 如何定义要从生产中的不同子目录提供的播放资源和API?,java,apache,scala,.htaccess,playframework-2.0,Java,Apache,Scala,.htaccess,Playframework 2.0,我正在使用Play2框架。如果我没有使用版本化资产,则所有资产都在本地正确呈现(但不是在生产环境中) 我要求本地资产由localhost:9000/assets/*提供,但在生产过程中,资产由www.domain.com/subfolder/assets/* 我还需要确保从localhost:9000/api/*和www.domain.com/subfolder/api/*以类似的方式在生产中提供api。这是因为已经有一个应用程序在www.domain.com上运行,它的资产是使用完全不同的技术

我正在使用Play2框架。如果我没有使用版本化资产,则所有资产都在本地正确呈现(但不是在生产环境中)

我要求本地资产由
localhost:9000/assets/*
提供,但在生产过程中,资产由
www.domain.com/subfolder/assets/*

我还需要确保从
localhost:9000/api/*
www.domain.com/subfolder/api/*
以类似的方式在生产中提供api。这是因为已经有一个应用程序在www.domain.com上运行,它的资产是使用完全不同的技术(PHP而不是Java/Scala)编写和提供的

我的游戏路线定义:

# Map static resources from the /public folder to the /assets URL path
GET     /assets/v/*file               controllers.Assets.versioned(path="/public", file: Asset)
资产以类似的方式加载到
header.scala.html
文件中:

<link rel="stylesheet" href="@routes.Assets.versioned("template/css/bootstrap.css").absoluteURL()" />
<link rel="stylesheet" href="@routes.Assets.versioned("stylesheets/main.css").absoluteURL()" />
我的play应用程序使用Apache中的反向代理配置提供,该配置可从www.domain.com/subfolder正确提供

但是,api和资产仍希望从
www.domain.com
加载,而不是
www.domain.com/子文件夹

我如何才能正确加载资产,以便它们在开发和生产中都能正确加载

正如我所说,资产在生产中加载到
/assets
文件夹中,而不是
子文件夹/assets

非常感谢任何帮助

更新

根据Kim的回答,我尝试了以下方法:

ProxyPreserveHost On
ProxyPass /sportsbook http://127.0.0.1:9000 retry=0
ProxyPassReverse /sportsbook http://127.0.0.1:9000 retry=0

ProxyHTMLEnable Off
ProxyHTMLURLMap http://localhost:9000 /sportsbook
<Location /sportsbook/>
    ProxyPassReverse http://localhost:9000/
    SetOutputFilter proxy-html
    ProxyHTMLURLMap /           /sportsbook/
    ProxyHTMLURLMap /sportsbook            /sportsbook
</Location>
ProxyPreserveHost打开
ProxyPass/sportsbookhttp://127.0.0.1:9000 重试=0
ProxyPassReverse/sportsbookhttp://127.0.0.1:9000 重试=0
可编程关闭
ProxyHTMLMAPhttp://localhost:9000 /运动手册
ProxyPassReversehttp://localhost:9000/
SetOutputFilter代理html
ProxyHTMLMAP//sportsbook/
ProxyHTMLURLMap/sportsbook/sportsbook

但是,这会破坏主站点(没有css或js工作)。有什么想法吗?

在反向代理中重写请求可能比在应用程序中更改路径更容易、更灵活。演示如何使用
mod\u rewrite
执行此操作。它可以简单到

RewriteRule "^/subfolder/(.*)" "http://playapp.example.com/$1" [P]

在反向代理中重写请求可能比更改应用程序中的路径更容易、更灵活。演示如何使用
mod\u rewrite
执行此操作。它可以简单到

RewriteRule "^/subfolder/(.*)" "http://playapp.example.com/$1" [P]

我无法解决上面的问题,显然从localhost:9000/子文件夹本地提供资产更容易


因此,基本上我只是更改了所有资产,使其指向本地目录和生产目录,并在apache中通过代理重定向将localhost:9000/子文件夹重定向到website.com/子文件夹

我无法解决上述问题,显然从localhost:9000/子文件夹在本地为资产提供服务更容易


因此,基本上我只是更改了所有资产,使其在本地和生产环境中都指向该目录,并在apache for localhost:9000/subfolder中使用代理重定向到website.com/subfolder

谢谢Kim,我认为这将是一种替代解决方案。从剧本上看,这是可能的。我更喜欢在应用程序中处理这一切,这样我就可以测试它了。然而,你可能是对的。我会尝试一下,你可以在自己的答案中发布你的游戏解决方案。Kim,我在上面的更新中尝试了代码(在原始问题中)。有什么想法吗?不幸的是对我不起作用,尽管我一辈子都不知道为什么。可能是Apache配置有问题,我还没有发现。我上面的回答暂时有效。谢谢Kim,我认为这将是一个替代解决方案。从剧本上看,这是可能的。我更喜欢在应用程序中处理这一切,这样我就可以测试它了。然而,你可能是对的。我会尝试一下,你可以在自己的答案中发布你的游戏解决方案。Kim,我在上面的更新中尝试了代码(在原始问题中)。有什么想法吗?不幸的是对我不起作用,尽管我一辈子都不知道为什么。可能是Apache配置有问题,我还没有发现。我上面的答案暂时有效。