我有一个包含3种不同配置的Play 2.0应用程序(application.conf,test.conf和prod.conf)
现在我有一个robots.txt文件,应该只为test.conf提供,对于其他环境,如果有人试图访问它,它应该给出404。
如何配置路由文件以检查我的应用程序是否使用test.conf?我可以在test.conf中设置一些我可以在路由文件中查看的变量吗?
这样的东西? (伪代码)
#{if environment = "test"}
GET /robots.txt controllers.Assets.at(path="/public", file="robots.txt")
#{/if}
#{else}
GET /robots.txt controllers.Application.notFoundResult()
#{/else}
答案 0 :(得分:1)
您无法在routes
文件中添加逻辑。
我会写一个控制器来提供robots.txt
文件。像这样:
在routes
文件中:
GET /robots.txt controllers.Application.robots
然后,在控制器中,我将测试我是否在测试环境中:
def robots = Action {
if (environment == "test") { // customize with your method
Redirect(routes.Assets.at("robots.txt"))
} else {
NotFound("")
}
}
我正在使用Scala,但它可以很容易地翻译成Java。
您可以检查应用是否处于以下三种状态之一:prod
,dev
或test
,即返回当前状态的简单方法:
private static String getCurrentMode() {
if (play.Play.isTest()) return "test";
if (play.Play.isDev()) return "dev";
if (play.Play.isProd()) return "prod";
return "unknown";
}
你可以用作:
play.Logger.debug("Current mode: "+ getCurrentMode());
当然,在你的情况下,这足以直接使用这些条件:
public static Result robots() {
return (play.Play.isProd())
? notFound()
: ok("User-agent: *\nDisallow: /");
}