将版本1.0.5.Final中的OCPsoft Rewrite更新为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}")
)
在重写changelog中有一点可以帮助你帮助我:
配置字符串现在是文字的。必须通过>参数配置正则表达式,例如:
.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)
...
答案 0 :(得分: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支持论坛上发现了这个并回答了我的问题。
答案 1 :(得分:1)
嗯......看起来确实像个bug,我会尝试重现这一点,但您不需要在目标网址中重新定义{i}
和{d}
。如果您使用请求绑定,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()
网址的请求重定向到新网址,也可以使用.html
。
如果您仍然遇到此问题,请在支持论坛上发帖,我们会弄清楚:)
抱歉,您遇到了麻烦,希望它不再是麻烦了。)