2

OCPsoft Rewrite从版本 1.0.5.Final 更新到 1.1.0.Final 时,以下规则不再起作用,我不知道如何解决:

.addRule(
    Join.path("/{i}/{d}")
        .where("i").matches("[-_a-zA-Z0-9~*]{8}")
        .where("d").matches("[-_a-zA-Z0-9~*]{32}")
        .to("/resources/html/user/doSomething.html?i={i}&d={d}")
)

在重写更改日志中,有一点可以帮助您帮助我:

配置字符串现在是文字。正则表达式必须通过 > 参数进行配置,例如:.defineRule().when(Path.matches("/{*}").where("*").matches(".*"))

我得到的例外是以下一个:

Exception starting filter OCPsoft Rewrite Filter
    java.lang.NullPointerException
        at org.ocpsoft.rewrite.servlet.config.rule.Join.where(Join.java:199)
        at org.ocpsoft.rewrite.servlet.config.rule.Join.where(Join.java:47)
        at com.myapp.util.RewriteConfigurationProvider.getConfiguration(RewriteConfigurationProvider.java:39)
        ...
4

2 回答 2

2

以下是诀窍,我只需要重新排序连接子句:

.addRule(
    Join.path("/{i}/{d}")
        .to("/resources/html/user/doSomething.html")
        .where("i").matches("[-_a-zA-Z0-9~*]{8}")
        .where("d").matches("[-_a-zA-Z0-9~*]{32}")
        .withRequestBinding();
)

感谢林肯,他发现了这一点并在 Rewrite 支持论坛上回答了我的问题。

于 2013-02-03T22:27:55.213 回答
1

{i}嗯.. 看起来确实像一个错误,我会尝试重现它,但您不需要重新定义{d}目标 URL。如果您使用请求绑定,Join 将自动为您处理,如下所示:

.addRule(
   Join.path("/{i}/{d}")
    .where("i").matches("[-_a-zA-Z0-9~*]{8}")
    .where("d").matches("[-_a-zA-Z0-9~*]{32}")
    .to("/resources/html/user/doSomething.html").withRequestBinding();
)

我猜如果你这样做,你的问题就会消失。.withInboundCorrection()如果您想将对旧.htmlURL 的请求重定向到新 URL,也可以使用。

如果您对此仍有疑问,请在支持论坛上发帖,我们会解决的 :)

对不起,你遇到了麻烦,希望不会再有麻烦了:)

于 2012-12-28T18:11:35.383 回答