【发布时间】:2016-08-29 04:31:14
【问题描述】:
我正在使用 Play 2 框架。如果我不使用版本化资产,所有资产都会在本地正确呈现(但不是生产)。
我要求从 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()" />
我正在将 js 资源加载到 footer.scala.html 文件中,如下所示:
<script src="@routes.Assets.versioned("template/js/jquery.min.js").absoluteURL()"></script>
<script src="@routes.Assets.versioned("template/js/bootstrap.min.js").absoluteURL()"></script>
<script type="text/javascript" src="@routes.Assets.versioned("template/angular/angular.js").absoluteURL()"></script>
<script type="text/javascript"
src="@routes.Assets.versioned("template/angular/angular-animate.js").absoluteURL()"></script>
<script type="text/javascript"
src="@routes.Assets.versioned("template/angular/angular-cookies.js").absoluteURL()"></script>
<script type="text/javascript"
src="@routes.Assets.versioned("template/angular/angular-route.js").absoluteURL()"></script>
<script type="text/javascript"
src="@routes.Assets.versioned("template/angular/angular-resource.js").absoluteURL()"></script>
<script type="text/javascript"
src="@routes.Assets.versioned("template/angular/angular-sanitize.js").absoluteURL()"></script>
<script type="text/javascript" src="@routes.Assets.versioned("javascripts/app.js").absoluteURL()"></script>
<script type="text/javascript"
src="@routes.Assets.versioned("javascripts/appController.js").absoluteURL()"></script>
<script type="text/javascript" src="@routes.Assets.versioned("javascripts/moment.js").absoluteURL()"> </script>
我的 play 应用程序使用 Apache 中的反向代理配置提供服务,该配置正确地从 www.domain.com/subfolder 提供服务
但是,API 和资产仍希望从 www.domain.com 加载,而不是从 www.domain.com/subfolder 加载
如何正确加载资产,以便它们在开发和生产中都正确加载?
我已经查看了https://www.playframework.com/documentation/2.5.x/AssetsOverview,因为我说资产在生产中加载到/assets 文件夹而不是subfolder/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>
但这会破坏主站点(没有 css 或 js 工作)。有什么想法吗?
【问题讨论】:
标签: java apache scala .htaccess playframework-2.0