Scala/Play/Nginx:静态资源路由
我已运行我的Play应用程序:Scala/Play/Nginx:静态资源路由,scala,nginx,playframework,routing,playframework-2.0,Scala,Nginx,Playframework,Routing,Playframework 2.0,我已运行我的Play应用程序: http://localhost:9000 Nginx是将其传递到此url的代理: http://localhost/Demo/ http://localhost/Demo/assets/stylesheets/main.css 不过,我对静态资产有一个问题。例如,这个资产在html模板中 <link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.cs
http://localhost:9000
Nginx是将其传递到此url的代理:
http://localhost/Demo/
http://localhost/Demo/assets/stylesheets/main.css
不过,我对静态资产有一个问题。例如,这个资产在html模板中
<link rel="stylesheet" media="screen" href="@routes.Assets.at("stylesheets/main.css")">
很明显,结果是找不到。如果我将其更改为此(在url前面添加/Demo
):
我的问题是:如何将这个/Demo
添加到所有静态资产中,而不将其硬编码到模板中?我更喜欢使用Play的路由来解决这个问题,并限制对nginx conf所做的更改
我尝试过像这样在application.conf
中添加url前缀
application.context="/Demo"
但这不仅影响了静态URL,也影响了所有URL,因此没有解决方案。有什么想法吗
我的堆栈:
播放框架2.2.1/
Scala 2.10.3/
Java 8 64位/
Nginx 1.4.3/
Ubuntu 13.10 64位
更新:解决方案感谢@biesior提供Java版本,我已经将其转换为scala:
package core
import controllers.routes
object Assets {
def at(path: String): String = {
"/Demo" + routes.Assets.at(path)
}
}
只需使用自己的资产实现覆盖路径(即在
utils
package中):
在模板中:
<img src='@utils.MyAssets.at("images/logo.png")' alt="">
另一方面,目标项目也会在子目录中工作吗?如果不是,只是使用子域更容易,也可以使用localhost,只需为该项目配置nginx以使用ie.:
http://demo.loc
而不是odhttp://localhost/Demo
并将此“域”添加到您的主机
文件只需使用自己的资产实现覆盖路径即可(即在utils
包中):
在模板中:
<img src='@utils.MyAssets.at("images/logo.png")' alt="">
另一方面,目标项目也会在子目录中工作吗?如果不是,它只是更容易使用子域,也可以使用localhost,只需为该项目配置nginx以使用ie.:
http://demo.loc
而不是odhttp://localhost/Demo
并将此“域”添加到您的主机
文件中使用自己的资产实现覆盖路径(即在utils
package中):
在模板中:
<img src='@utils.MyAssets.at("images/logo.png")' alt="">
另一方面,目标项目也会在子目录中工作吗?如果不是,它只是更容易使用子域,也可以使用localhost,只需为该项目配置nginx以使用ie.:
http://demo.loc
而不是odhttp://localhost/Demo
并将此“域”添加到您的主机
文件中使用自己的资产实现覆盖路径(即在utils
package中):
在模板中:
<img src='@utils.MyAssets.at("images/logo.png")' alt="">
另一方面,目标项目也会在子目录中工作吗?如果不是,它只是更容易使用子域,也可以使用localhost,只需为该项目配置nginx以使用ie.:
http://demo.loc
而不是odhttp://localhost/Demo
并将此“域”添加到您的主机
文件中你尝试了路径GET/Demo/assets/*file assets.at(“public”,file)
并阅读?@krivachy.akos Yes和Yes。将/Demo
添加到路由会导致所有资源404。唯一有效的方法是将其附加到模板中。它在没有nginx的情况下工作吗?你认为它是特定于此的吗?我在一个本地播放应用程序上试用了它,效果很好:GET/Demo/assets/*file controllers.assets.at(path=“/public”,file)
。意思是我的页面有:
,并导致:
@krivachy.akos它在没有nginx的情况下工作,无论我是否添加/Demo
(无更改),但这不是问题所在。我需要它在Nginx下工作,如果我编辑模板URL,它确实可以工作-我只需要一个地方就可以了。您是否尝试过路径GET/Demo/assets/*file assets.at(“public”,file)
并阅读?@krivachy.akos Yes和Yes。将/Demo
添加到路由会导致所有资源404。唯一有效的方法是将其附加到模板中。它在没有nginx的情况下工作吗?你认为它是特定于此的吗?我在一个本地播放应用程序上试用了它,效果很好:GET/Demo/assets/*file controllers.assets.at(path=“/public”,file)
。意思是我的页面有:
,并导致:
@krivachy.akos它在没有nginx的情况下工作,无论我是否添加/Demo
(无更改),但这不是问题所在。我需要它在Nginx下工作,如果我编辑模板URL,它确实可以工作-我只需要一个地方就可以了。您是否尝试过路径GET/Demo/assets/*file assets.at(“public”,file)
并阅读?@krivachy.akos Yes和Yes。将/Demo
添加到路由会导致所有资源404。唯一有效的方法是将其附加到模板中。它在没有nginx的情况下工作吗?你认为它是特定于此的吗?我在一个本地播放应用程序上试用了它,效果很好:GET/Demo/assets/*file controllers.assets.at(path=“/public”,file)
。意思是我的页面有:
,并导致:
@krivachy.akos它在没有nginx的情况下工作,无论我是否添加/Demo
(无更改),但这不是问题所在。我需要它在Nginx下工作,如果我编辑模板URL,它确实可以工作-我只需要一个地方就可以了。您是否尝试过路径GET/Demo/assets/*file assets.at(“public”,file)
并阅读?@krivachy.akos Yes和Yes。将/Demo
添加到路由会导致所有资源404。唯一有效的方法是将其附加到模板中。它在没有nginx的情况下工作吗?你认为它是特定于此的吗?我在一个本地播放应用程序上试用了它,效果很好:GET/Demo/assets/*file controllers.assets.at(path=“/public”,file)
。意思是我的页面有:
,并导致:
@krivachy.akos它在没有nginx的情况下工作,无论我是否添加/Demo
(无更改),但这不是问题所在。我需要它在Nginx下工作,如果我编辑模板URL,它确实可以工作-我只需要一个地方就可以完成这项工作。谢谢,这很有效,不过我已经将其转换为Scala,