1

我有一个具有 3 种不同配置(application.conf、test.conf 和 prod.conf)的 Play 2.0 应用程序

现在我有一个 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}
4

1 回答 1

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。

编辑 - java 示例

您可以检查应用程序是否处于以下三种状态之一:或prod,即返回当前状态的简单方法:devtest

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: /");
}
于 2013-09-08T11:46:39.923 回答