2

我成功地使用了rewrite.properties 中的重写规则。

现在,我想像这样重写 url:

 https://localhost:8443/test/customer1/login.xhtml

 https://localhost:8443/test/login.xhtml?customer=customer1

因此,我使用以下重写规则,但它不起作用。

 RewriteRule ^/(.*)$/login\.xhtml /login.xhtml?customer=$1

不幸的是,它不起作用。找不到该页面。有人有想法吗?

你知道我如何在重写后记录或查看生成的 url 吗?

4

2 回答 2

3

你能发布你的 .properties 文件吗?

这是rewrite.properties的 JBoss Web文档(供其他人参考)。

如果您没有找到解决方案,请尝试UrlRewriteFilter

但是仔细看看你的正则表达式,你似乎需要更多地研究这个问题。我建议不要使用customer1 but customer/1- 没有斜线,在一般情况下更难拆分。反正:

RewriteRule ^/customer([0-9]+)/login\.xhtml /login.xhtml?customer=$1

关于日志记录,阀门似乎使用此代码进行记录:

295                   if (container.getLogger().isDebugEnabled()) {
296                       container.getLogger().debug("Rewrote " + test + " as " + newtest
297                               + " with rule pattern " + rules[i].getPatternString());

因此,您可能会通过设置整体org.jboss.weborg.apache.catalina调试来获得该消息。然后检查standalone/log/server.log

更新:我认为请求者想将“customer1”解析为“customer=1”。原来他只是想移动路径段......

所以,我会尝试:

RewriteRule ^/([^/]+)/login\.xhtml /login.xhtml?customer=$1

这意味着,在上下文根之后取任何东西直到第一个/独占。

于 2013-06-25T02:23:36.550 回答
2

您应该能够使用该RewriteLog指令来查看发生了什么。

不过,看看你的重写规则,我有一种预感,我知道出了什么问题:

RewriteRule ^/(.*)$/login\.xhtml /login.xhtml?customer=$1

首先,该规则不应该匹配,因为$在字符串的中间 - 这应该标记请求字符串的结尾。之后的一切都是多余的。让我们把它拿出来:

RewriteRule ^/(.*)/login\.xhtml /login.xhtml?customer=$1

如果我将此规则应用于https://localhost:8443/test/customer1/login.xhtml,我将被重定向到https://localhost:8443/login.xhtml?customer=test/customer1,这不是您想要的。我的猜测是你需要考虑/test/路径的一部分。要获得您想要的输出,请尝试以下操作:

RewriteRule ^/test/(.*)/login\.xhtml /test/login.xhtml?customer=$1
于 2013-06-27T13:36:16.313 回答