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 

Есть ли способ сделать это в 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 –

+1

@SarveshKumarSingh напишите ответ вместо комментария, это хороший момент для подтверждения/принятия – biesior

+0

@biesior Объем решения не поместится в ответе. Слишком много вещей, которые нужно понимать, и весь проект должен быть создан определенным образом. –

ответ

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 с другим парнем, опубликованным в качестве комментария к моему вопросу. На самом деле это лучший и более чистый способ сделать это, на мой взгляд, так что может быть полезно и вам. –