1

ルートファイルの最後に、以前はキャッチされなかったリクエストをキャッチするためのキャッチオールルートを配置し、それを自分のルーターに渡します(さらに処理するため)。

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

もちろん、その線の前には他にもたくさんのルートがあります。私にとって大きな驚きは、前のルートもヒットしたとしても、毎回キャッチオールがヒットすることです。そのため、アドレスを開くと、コンソール domain.tld/testに両方のログが表示されます。簡略化されたサンプルがあります:Test action hit!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、もちろん、キャッチオールを安定したものに変更すると、ダブルヒットは発生しなくなります。

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

/news/しかし、私は本当にセグメントを避けたいです。それは可能ですか?

4

1 に答える 1

6

私はそれを繰り返し、Chromium(Google Chromeのコア)でも同じ問題を抱えていましたが、Firefoxでは問題がありませんでした。

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 に答える