2015-02-05 58 views
5

我想要將多個子域和/或根域指向單個Play Framework 2.3(Scala)應用程序,例如apples.com,bananas.com或buy.bananas.com。Play Framework 2.3中的域路由

根據請求來自哪個域,我想擁有不同的路由。

理想的情況下,它應該工作是這樣的:

GET apples.com  @controllers.ApplesController.home 
GET bananas.com  @controllers.BananasController.home 
GET buy.bananas.com @controllers.BananasController.buy 

有沒有辦法在遊戲框架2.3做到這一點?

+5

像這樣的事情更好地由http服務器處理...不是由框架。不過,你可以實現一些這樣的功能。有關更多詳情,請參閱 - > http://typesafe.com/activator/template/play-multidomain-seed和https://github.com/adrianhurt/play-multidomain-seed/blob/master/app/Global.scala – 2015-02-05 20:26:32

+1

@SarveshKumarSingh寫一個答案而不是評論,這是點贊/接受 – biesior 2015-02-05 20:31:20

+0

@biesior解決方案的範圍不適合答案。需要了解的東西太多,需要以特定的方式創建整個項目。 – 2015-02-05 20:34:08

回答

5

我在java中。這裏的工作是做它在Java中的方法也許能夠幫助

路線

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); 
     } 



} 

I不知道它是否是這樣做的好方法。我已經用request().uri()試過了,但沒有與request().host()試過,這對我很有幫助。可能會有所幫助。

+1

這是我的問題的解決方案,謝謝。請確保也簽出github鏈接發佈的其他人作爲我的問題的評論。在我看來,它實際上是一種更好更清潔的方式,所以也可能對您有所幫助。 – 2015-02-07 01:52:52