JSF - 忽略 URL 中的大小写 (OCPSoft)
JSF - ignore case in URLs (OCPSoft)
有没有一种方法可以在 OCPSoft rewrite 中独立于大小写定义重写规则而不是定义多个规则,因为任何字符都可以是小写或大写?
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 的请求。
是的!绝对。
最简单的方法可能是使用带有正则表达式 .matches()
约束的参数:
cb.addRule(
Join.path('/{path}').to("/test.xhtml"))
.where("path")
.matches("(?i)test"); // <-- your path regex pattern goes here
您还可以将 Resource
或 Filesystem
条件与自定义转换结合使用,使其成为更全局的规则:
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}
的 'found / correct' 值,如果您想走得更远.
有没有一种方法可以在 OCPSoft rewrite 中独立于大小写定义重写规则而不是定义多个规则,因为任何字符都可以是小写或大写?
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 的请求。
是的!绝对。
最简单的方法可能是使用带有正则表达式 .matches()
约束的参数:
cb.addRule(
Join.path('/{path}').to("/test.xhtml"))
.where("path")
.matches("(?i)test"); // <-- your path regex pattern goes here
您还可以将 Resource
或 Filesystem
条件与自定义转换结合使用,使其成为更全局的规则:
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}
的 'found / correct' 值,如果您想走得更远.