playframework,你能在主机名/子域上路由吗?

playframework,你能在主机名/子域上路由吗?,playframework,Playframework,我们正在将一个seam应用程序(2个应用程序)移植到一个play应用程序中,以立即测试play(好吧,移植更难的场景…到目前为止,一切都很好) 我们希望能够通过主机名路由根/目录。对于 我们想路由到我们的home.html页面,但是 http://*.premonitonx.com/我们希望路由到仪表板(如果未登录,仪表板将重定向到登录页面) 最后,我们要确定路线 重定向到alvazan.com网页 另外,我们也喜欢这样的路线 http://{company}.premonitionx.com/

我们正在将一个seam应用程序(2个应用程序)移植到一个play应用程序中,以立即测试play(好吧,移植更难的场景…到目前为止,一切都很好)

我们希望能够通过主机名路由根/目录。对于 我们想路由到我们的home.html页面,但是

http://*.premonitonx.com/我们希望路由到仪表板(如果未登录,仪表板将重定向到登录页面)

最后,我们要确定路线 重定向到alvazan.com网页

另外,我们也喜欢这样的路线

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

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

http://{company}.dev.premonitionx.com,这样我们就可以在本地机器上进行测试,并测试不同的公司,等等(如您所知,如果总是本地主机,许多测试就无法测试)

谢谢,
迪安

有些医生更难找到玩。我在任何真实的文档中都找不到这个,但我记得它是发布版的一部分


路由中的虚拟主机

路由文件现在支持主机匹配。如果必须从主机参数提取操作参数,则此选项非常有用。例如,对于SAAS应用程序,您可以使用:

GET    {client}.mysoftware.com/         Application.index
然后自动检索任何其他请求参数的客户端值:

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

我认为通过
路由
文件的虚拟主机在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")
    }
  }

}
路由
文件中,您可以编写如下内容:

GET     /                  controllers.VirtualHostsController.index()

谢谢,但我最终找到了原因。java并不真正支持https,所以我创建了自己的平台,在您想要的每个域上托管(每个域有N个SSL证书和一个SSLEngine证书)。问题是大多数nio层都假设一个!。我解析第一个hello SSL数据包,但不修改它。因此,我的webpieces Web服务器现在支持它,而我认为java中的其他任何人都不支持解析SSL hello数据包。对于https,它不起作用,因为每个域需要一个证书,每个域需要一个SSLEngine,而据我所知,netty不支持使用多个SSLEngine。我用我们自己的nio层解决了这个问题,这样我们就可以在这个Web服务器上支持多个域