Play Framework 2.3中的域路由

6
我希望将多个子域名或根域名指向单个Play Framework 2.3 (Scala) 应用程序,例如 apples.com,bananas.com 或 buy.bananas.com。
根据请求的域名不同,我想有不同的路由。
理想情况下,应该像这样工作:
GET    apples.com        @controllers.ApplesController.home
GET    bananas.com       @controllers.BananasController.home
GET    buy.bananas.com   @controllers.BananasController.buy

有没有在Play Framework 2.3中实现这个的方法?

5
像这样的事情最好由HTTP服务器处理,而不是框架。尽管如此,您仍然可以实现其中的一些功能。有关更多详细信息,请参阅->http://typesafe.com/activator/template/play-multidomain-seed和https://github.com/adrianhurt/play-multidomain-seed/blob/master/app/Global.scala。 - sarveshseri
1
@SarveshKumarSingh,请写一个答案而不是评论,这是点赞/接受的好方法。 - biesior
@biesior 解决方案的范围不适合放在一个答案中。有太多需要理解的事情,整个项目需要以特定的方式创建。 - sarveshseri
1个回答

4

我是一名从事Java开发的工程师。下面介绍一种在Java中实现的方法,也许可以帮助你。

路由(routes)

GET    /             @controllers.ApplesController.index
GET    /apples       @controllers.ApplesController.home
GET    /bananas      @controllers.BananasController.home
GET    /buybananas   @controllers.BananasController.buy

控制器

@With(CheckUrl.class)
public static Result index() {
        return ok(index.render("Unable to resolve host."));
    }

CheckUrl.java

public class CheckUrl extends play.mvc.Action.Simple {

    public F.Promise<SimpleResult> call(Http.Context ctx) throws Throwable {

        String host = request().host();
        System.out.println("HOST IS "+host);

              if (host.equalsIgnoreCase("apples.com")) {

             return F.Promise.pure(redirect("/apples"));

        }else if (host.equalsIgnoreCase("bananas.com ")){

         return F.Promise.pure(redirect("/bananas"));

        }else if (host.equalsIgnoreCase("buy.bananas.com")){

         return F.Promise.pure(redirect("/buybananas"));
        }else{
          return delegate.call(ctx);
        }



}

我不确定这是否是正确的做法。我已经尝试过使用request().uri(),但没有使用request().host(),而且它对我有用。也许这可以帮助你。


1
这是一个解决我的问题的方案,谢谢。请确保也查看一下那个人在我的问题下面评论中发布的 GitHub 链接。在我看来,这实际上是一种更好、更清晰的方法,所以对你也可能有帮助。 - Daniel Lang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接