我有3个路由文件,分别是web.route,admin.routes和swift.routes。每个路由文件都代表一个子域,应根据URI子域路径进行更改。 玩Java 请!
public Handler onRouteRequest(RequestHeader requestHeader) {
String host = requestHeader.getHeader(Http.HeaderNames.HOST);
Pattern pattern = Pattern.compile("^([a-z0-9]+)\\.([a-zA-Z0-9_%*:.]+)");
Matcher matcher = pattern.matcher(host);
if (matcher.matches()) {
String subDomain = matcher.group(1);
if (subDomain.equalsIgnoreCase("swift")) {
//use swift routes file
} else if(subdomain.equalsIgnoreCase("admin")) {
//use the admin routes file
} else {
//use the web route for all other subdomain or non-subdomain
}
}
return super.onRouteRequest(requestHeader);
}
我在网上看过很多关于这个问题的讨论,但没有一个足够详细,也许这就是游戏框架2.4我所见过的只有玩1和玩scala。我也理解通过SbtProject完成这项工作的最佳方法 https://www.playframework.com/documentation/2.2.x/SBTSubProjects 但是,我没有足够的经验来完成这种方法。任何帮助将不胜感激。
答案 0 :(得分:0)
我认为你有两个问题。
第一个是如何使用mutliple路由文件而不实际使用子项目:它实际上非常简单,请看这个问题Play Framework: split routes in multiple files without sub projects。如您所见,您可以使用url前缀拆分路由文件。
第二个是如何在Play Framework中使用子域进行路由。 AFAIK,Play Framework 2.x不支持开箱即用的子域名。因此,subdomain1.mydomain.com/action/hello
和subdomain2.mydomain.com/action/hello
将得到平等对待。然而,你可以做的是一些网址重写。目标是将subdomain1.mydomain.com/action/hello
转换为带前缀的URL,框架可以路由,例如mydomain.com/subdomain1/action/hello
。
我知道您可以使用支持网址重写的http服务器(如Nginx)来执行此操作(请参阅播放文档HTTP Server和Url rewrite module)。但也许您可以使用onRouteRequest
方法直接在Play中执行此操作。
我希望它有所帮助,欢呼。