2015-02-05 16 views
5

Chcę wskazać wiele subdomen i/lub domen root'a w jednej aplikacji Play Framework 2.3 (Scala), na przykład apples.com, bananas.com lub buy.bananas.com.Trasy domen w Play Framework 2.3

W zależności od domeny, do której przychodzi żądanie, chcę mieć różne trasy.

Idealnie, to powinno działać tak:

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

Czy istnieje jakiś sposób, aby to zrobić w grze Framework 2.3?

+5

Takie rzeczy są lepiej obsługiwane przez serwery http ... Nie według frameworków. Mimo to możesz osiągnąć niektóre z takich funkcji. Aby uzyskać więcej informacji, zapoznaj się z -> http://typesafe.com/activator/template/play-multidomain-seed i https://github.com/adrianhurt/play-multidomain-seed/blob/master/app/Global.scala –

+1

@SarveshKumarSingh napisać odpowiedź zamiast komentarza, jest dobry punkt, aby upvote/accept – biesior

+0

@biesior Zakres rozwiązania nie pasuje do odpowiedzi. Zbyt wiele rzeczy do zrozumienia i cały projekt musi zostać stworzony w określony sposób. –

Odpowiedz

5

Pracuję w Javie .Tutaj jest sposób to zrobić w Javie może, że może pomóc

trasy

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

kontrolera

@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 Nie wiem, czy to dobry sposób. Próbowałem go z request().uri(), ale nie z request().host() i to działało dla mnie. Może to pomoże.

+1

To jest rozwiązanie mojego problemu, dziękuję. Pamiętaj, aby również sprawdzić link do githuba, który został opublikowany przez innego faceta jako komentarz do mojego pytania. To naprawdę ładniejszy i czystszy sposób, aby to zrobić, moim zdaniem, więc może być również pomocny dla ciebie. –

Powiązane problemy