1

在我的路由文件的末尾,我放置了一个包罗万象的路由来捕获以前未捕获的请求并将其传递给我自己的路由器(用于进一步处理):

GET    /*nameUrl      controllers.Application.router(nameUrl: String)

当然,在那条线之前还有许多其他路线。对我来说,最大的惊喜是每次都击中所有内容,即使之前的路线也被击中,所以如果我打开地址domain.tld/test,它会在控制台中显示我的两个日志Test action hit!AND Custom router hit!。有一个简化的示例:

public static Result test() {
    Logger.debug("Test action hit!");
    return ok();
}

public static Result router(String nameUrl) {
    Logger.debug("Custom router hit!");
    return ok();
}

路线(按此顺序)

GET    /test          controllers.Application.test
GET    /*nameUrl      controllers.Application.router(nameUrl: String)

我想得到什么:

我想用我的路由器获取文章的 url,即domain.tld/category_1/article_title前面没有任何前缀,当然,如果我将 catch all 更改为稳定的东西,它将不再受到双重打击:

GET    /news/*nameUrl      controllers.Application.router(nameUrl: String)
domain.tld/news/category_1/article_title

但是我真的很想避免/news/分段。那可能吗?

4

1 回答 1

6

我重复了一遍,Chromium(谷歌浏览器的核心)也有同样的问题,但火狐没有。

我使用 Global.java 分析了请求。

public class Global extends GlobalSettings {
    @Override
    public Action onRequest(Http.Request request, Method method) {
        Logger.info("request-path: " + request.path());
        return super.onRequest(request, method);
    }
}
//output:
[info] application - request-path: /favicon.ico

对于每个 GET /test 请求,Chromium 都会尝试加载网站图标。

因此,在 conf/routes 中包含以下内容:

GET  /favicon.ico   controllers.Assets.at(path="/public", file="favicon.ico")
于 2012-10-27T20:30:46.853 回答