【问题标题】:Play Framework Change route file onRouteRequestPlay Framework 更改路由文件 onRouteRequest
【发布时间】:2016-04-09 08:52:48
【问题描述】:

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

我在网上看到了很多关于这个问题的讨论,但没有一个足够详细,也许这是 play framework 2.4 我所看到的都是 play 1 和 play scala。我也明白完成这项工作的最佳方法是通过 SbtProject https://www.playframework.com/documentation/2.2.x/SBTSubProjects 但是,我没有奢侈的方法去经历这种方法。任何帮助将不胜感激。

【问题讨论】:

    标签: java playframework typesafe


    【解决方案1】:

    我认为你有两个问题。

    第一个是如何在不实际使用子项目的情况下使用多个路由文件:其实很简单,请看这个问题Play Framework: split routes in multiple files without sub projects。如您所见,您可以使用 url 前缀拆分路由文件。

    第二个问题是如何利用 Play Framework 中的子域进行路由。 AFAIK,Play Framework 2.x 不支持开箱即用的子域。所以subdomain1.mydomain.com/action/hellosubdomain2.mydomain.com/action/hello 将被平等对待。但是,您可以做的是一些 url 重写。目标是将subdomain1.mydomain.com/action/hello 转换为带有前缀的URL,框架可以路由,例如mydomain.com/subdomain1/action/hello

    我知道您可以使用支持 url 重写的 http 服务器(例如 Nginx)来执行此操作(请参阅 Play 文档 HTTP ServerUrl rewrite module)。但也许您可以直接在 Play 中通过 onRouteRequest 方法执行此操作。

    希望对你有帮助,干杯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多