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

您还可以将ResourceorFilesystem条件与自定义转换一起使用,以使其成为更全局的规则:

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 回答