playframework,可以在hostnamessubdomains上路由吗?

问题描述 投票:3回答:2

我们正在将一个seam应用(2个应用)移植到一个play应用中,以测试play(好吧,移植更难的场景......到目前为止,还不错)。

我们希望能够在根目录的hostname上进行路由。 对于 http:/alvazan.com 我们想路由到我们的home.html页面,但对于

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

最后,我们希望路由到http:/premonitionx.com 重定向到alvazan.com网页。

此外,我们将爱的路线,如

http:/{company}.premonitionx.com{project}{release}。

这在playframework中可能吗? 在开发模式下,我们现在有这些URLs用于在seam中开发,以使用

http:/{company}.dev.premonitionx.com这样我们就可以在本地机器上测试,测试出不同的公司,等等等等。 (你知道如果一直是localhost的话,很多测试都无法测试)

谢谢你,院长

playframework
2个回答
11
投票

有些文档在游戏中比较难找:) 我在任何真正的文档中都找不到这个,但记得这是一个版本的一部分......

http:/www.playframework.orgdocumentation1.1releasenotes-1.1#routeHost


航线中的虚拟主机

路由文件现在支持主机匹配。如果必须从主机参数中提取动作参数,这将非常有用。例如,对于一个SAAS应用程序,你可以使用:

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

然后像其他请求参数一样,自动检索客户端的值。

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


0
投票

我想通过虚拟主机 routes 文件是在play版本2.x 不是 可用了。

但是你可以做的是准备一个控制器来代理这些请求。这是我的示例代码,它在play 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()
© www.soinside.com 2019 - 2024. All rights reserved.