playframework,你可以在主机名/子域名上路由?

时间:2012-02-04 20:49:58

标签: playframework

我们正在将一个接缝应用程序(2个应用程序)移植到一个播放应用程序以立即测试播放(好吧,移植更难的场景......到目前为止,非常好)。

我们希望能够在主机名上路由根目录。对于 http://alvazan.com/我们想要转到我们的home.html页面,但是

http://*.premonitionx.com/我们想要路由到仪表板(如果没有登录则会重定向到登录页面。)

最后,我们想要路线 http://premonitionx.com/重定向到alvazan.com网页。

此外,我们会喜欢

之类的路线

的http:// {公司} .premonitionx.com / {项目} / {释放}

甚至可以在playframework中使用????在开发模式下,我们现在有这些网址用于开发接缝以便使用

http:// {company} .dev.premonitionx.com,以便我们可以在我们的本地机器上进行测试,并测试不同的公司等等。(如您所知,许多测试无法通过测试永远是localhost)

感谢, 迪安

2 个答案:

答案 0 :(得分:10)

有些文档更难找到玩法:)我在任何真实的文档中都找不到这个但是记得它是发布的一部分......

http://www.playframework.org/documentation/1.1/releasenotes-1.1#routeHost


路线虚拟托管

routes文件现在支持主机匹配。如果必须从host参数中提取操作参数,这可能很有用。例如,对于SAAS应用程序,您可以使用:

GET {client}.mysoftware.com/ Application.index

然后自动检索客户端值,与任何其他请求参数一样:

public static void index(String client) { ... }

答案 1 :(得分:0)

我认为通过routes文件进行的虚拟托管已在播放版本2.x中出现, 不再可用。

但是您可以做的是准备一个控制器来代理此类请求。这是我在运行2.8.x时工作的示例代码:

@Singleton
class VirtualHostsController @Inject() (
  langs: Langs,
  ccs: ControllerComponents
) extends AbstractController(ccs) with I18nSupport {

  private val logger = Logger(classOf[VirtualHostsController])

  def index() = Action { implicit request =>
    logger.info(s"Handling Virtual Hosts for ${request.host}")

    request.host match {
      case "localhost:9000" => Redirect(routes.SomeController.show())
      case "sub.domain.tld" => Redirect(routes.OtherController.show())
      case _ => InternalServerError("unknown domain")
    }
  }

}

routes文件中,您可以编写如下内容:

GET     /                  controllers.VirtualHostsController.index()