Scala/Play/Nginx:静态资源路由

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

我已运行我的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.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
而不是od
http://localhost/Demo
并将此“域”添加到您的
主机
文件

只需使用自己的资产实现覆盖路径即可(即在
utils
包中):

在模板中:

<img src='@utils.MyAssets.at("images/logo.png")' alt="">


另一方面,目标项目也会在子目录中工作吗?如果不是,它只是更容易使用子域,也可以使用localhost,只需为该项目配置nginx以使用ie.:
http://demo.loc
而不是od
http://localhost/Demo
并将此“域”添加到您的
主机
文件中使用自己的资产实现覆盖路径(即在
utils
package中):

在模板中:

<img src='@utils.MyAssets.at("images/logo.png")' alt="">


另一方面,目标项目也会在子目录中工作吗?如果不是,它只是更容易使用子域,也可以使用localhost,只需为该项目配置nginx以使用ie.:
http://demo.loc
而不是od
http://localhost/Demo
并将此“域”添加到您的
主机
文件中使用自己的资产实现覆盖路径(即在
utils
package中):

在模板中:

<img src='@utils.MyAssets.at("images/logo.png")' alt="">



另一方面,目标项目也会在子目录中工作吗?如果不是,它只是更容易使用子域,也可以使用localhost,只需为该项目配置nginx以使用ie.:
http://demo.loc
而不是od
http://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,