我们正在将一个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的话,很多测试都无法测试)
谢谢你,院长
有些文档在游戏中比较难找:) 我在任何真正的文档中都找不到这个,但记得这是一个版本的一部分......
http:/www.playframework.orgdocumentation1.1releasenotes-1.1#routeHost
航线中的虚拟主机
路由文件现在支持主机匹配。如果必须从主机参数中提取动作参数,这将非常有用。例如,对于一个SAAS应用程序,你可以使用:
GET {client}.mysoftware.com/ Application.index
然后像其他请求参数一样,自动检索客户端的值。
public static void index(String client) {
...
}
我想通过虚拟主机 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()