legacy-knowledge-base
公開されました Jul. 2, 2025

FriendlyURLMapper のパターンとマッチャー

written-by

Cristina Rodriguez

How To articles are not official guidelines or officially supported documentation. They are community-contributed content and may not always reflect the latest updates to Liferay DXP. We welcome your feedback to improve How To articles!

While we make every effort to ensure this Knowledge Base is accurate, it may not always reflect the most recent updates or official guidelines.We appreciate your understanding and encourage you to reach out with any feedback or concerns.

legacy-article

learn-legacy-article-disclaimer-text

問題

  • FriendlyURL ポートレットが一部の URL を正しく解析していません。
  • URL を使いやすくするためにモジュールを実装するときに、routes.xml で定義する必要があるパターンの種類が明確でない場合があります (この実装に関する追加情報を参照してください)。
  • たとえば、私の routes.xml が次のようになっている場合:
    <routes>
    <route>
    <pattern>/{groupId}/{articleURLTitle}</pattern>
    </route>
    </routes>
  • 次の URL は ではなく であり、正しく解析されます。
    http://localhost:8080/detail/-/content/20125/test.cc
  • そして、ログに次のようなメッセージが表示されます ( DefaultFriendlyURLMapper クラスのログ レベルが WARNに設定されている場合)。
    2021-07-26 14:46:06.891 WARN  [http-nio-7100-exec-10][DefaultFriendlyURLMapper:150] No route could be found to match URL /20125/test.cc
  • これは、 routes.xml で定義されたパターンが正しくないためです。そのため、Liferay は不適切なマッチャーを選択します。

Environment

  • Liferay DXP

解決策

  • ファイル routes.xml で定義されたパターンは、正しいマッチャを適用するための鍵となるため、 FriendlyURL ポートレットが処理する URL の種類を知ることが重要です。
  • Liferay で利用可能なマッチャーは次のとおりです。
  • それぞれが特定のマッチング ルールを定義します。たとえば、 DefaultMatcher 、URL にドット (".") を含めることはできません。
  • どちらか一方を使用するために適用されるロジックは、ここでは と定義されています。
  • 前の例では、パターンにコロン (":") が含まれていないため、 DefaultMatcher が設定されます。 そして、このマッチャーは "" を拒否するので、ドットを含む URL:
     if ((c == CharPool.SLASH) || (c == CharPool.PERIOD)) {
    return false;
    }
    URL http://localhost:8080/detail/-/content/20125/test.cc は解析されません。
  • 解析されたドットを含む URL を取得するには、例 に対して 次のパターンで定義する必要があります。
    <pattern>/{groupId}/{templateKey}/{articleURLTitle:[^/]+}</pattern>

    したがって、 NotSlashMatcher が に選択され、解析ではドットが拒否されません。

追加情報

did-this-article-resolve-your-issue

legacy-knowledge-base