Scala/播放/Nginx:静态资源路由
-
20-12-2019 - |
题
我的游戏应用程序正在运行:
http://localhost:9000
Nginx正在代理将其传递给此url:
http://localhost/Demo/
虽然我有静态资产的问题。例如,html模板中的此资源
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
要去
http://localhost/assets/stylesheets/main.css
而且明显导致找不到。如果我把它改为这个(添加 /Demo
url前面):
<link rel="stylesheet" media="screen" href="/Demo@routes.Assets.at("stylesheets/main.css")">
它现在将正确地转到此url:
http://localhost/Demo/assets/stylesheets/main.css
我的问题是:我怎样才能添加这个 /Demo
对于我所有的静态资产,没有硬编码到我的模板?我更喜欢使用Play的路由来解决这个问题,并限制对nginx conf所做的更改。
我已经尝试将url前缀添加到 application.conf
像这样
application.context="/Demo"
但这影响了所有的url,不仅静态的,所以不是一个解决方案。有什么想法吗?
我的堆栈:游戏框架2.2.1 / 斯卡拉2.10.3 / Java8 64位 / Nginx1.4.3 / Ubuntu13.10 64位
更新资料:解决方案 感谢@biesior提供Java版本,我已经将其转换为scala:
package core
import controllers.routes
object Assets {
def at(path: String): String = {
"/Demo" + routes.Assets.at(path)
}
}
解决方案
只需使用自己的资产实现复盖路径即可。在 utils
包):
package utils;
import controllers.routes;
public class MyAssets {
public static String at(String path){
return "/Demo"+ routes.Assets.at(path).toString();
}
}
在模板中:
<img src='@utils.MyAssets.at("images/logo.png")' alt="">
另一方面,目标项目也可以在子目录中工作吗?如果不是更容易使用子域名,也可以使用localhost,只需配置您的nginx以使该项目使用ie即可。: http://demo.loc
相反od http://localhost/Demo
并添加此 '域名' 致你的 hosts
档案
不隶属于 StackOverflow