0

どの文字も小文字または大文字になる可能性があるため、複数のルールを定義する代わりに、大文字と小文字を区別せずにOCPSoft書き換えで書き換えルールを定義する方法はありますか?

cb.addRule(Join.path('/Test').to("/test.xhtml"));
cb.addRule(Join.path('/test').to("/test.xhtml"));

何かのようなもの:

boolean ignoreCase = true;
cb.addRule(Join.path('/Test', ignoreCase).to("/test.xhtml"));

バックグラウンド:

404 エラーをログに記録すると、小文字の URL だけで多くのリクエストが発生します。

4

1 に答える 1

0

はい!絶対。

これを行う最も簡単な方法は、おそらく正規表現.matches()制約付きのパラメーターを使用することです。

cb.addRule(
  Join.path('/{path}').to("/test.xhtml"))
      .where("path")
      .matches("(?i)test"); // <-- your path regex pattern goes here

Resourceカスタム変換でorFilesystem条件を使用して、これをよりグローバルなルールにすることもできます。

public class Lowercase implements Transposition<String>
{
   @Override
   public String transpose(Rewrite event, EvaluationContext context, String value)
   {
      return value.toLowerCase();
   }
}

それで...

.addRule(Join.path("/{path}").to("/{path}.xhtml"))
.when(Resource.exists("{path}.xhtml"))
.where("path")
.matches("[a-zA-Z]+")
.transposedBy(new Lowercase())

もちろん、これは xhtml ファイルがすべて小文字の命名スキームを使用していることを前提としています。

さらに先に進みたい場合は、独自のカスタム.when()条件を作成して、最も可能性の高い一致を見つけてから、転置の「見つかった/正しい」値を置き換えることができます。{path}

于 2021-12-14T17:41:56.383 に答える