【问题标题】:RewriteRule in JBoss AS 7JBoss AS 7 中的重写规则
【发布时间】:2013-06-10 20:49:18
【问题描述】:

我成功地玩了 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 吗?

【问题讨论】:

  • 顺便问一下,你用的是什么网络框架?大多数都内置了某种重写 - JSF 2,Wicket,仅举几例。

标签: java mod-rewrite url-rewriting jboss jboss7.x


【解决方案1】:

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

这是JBoss Web docs for rewrite.properties(供其他人参考)。

如果您没有找到解决方案,请尝试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 设置为 DEBUG 来获得该消息。然后查看standalone/log/server.log

更新:我以为提问者想将“customer1”解析为“customer=1”。原来他只是想移动路径段……

所以,我会尝试:

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

这意味着,取上下文根之后的任何内容,直到第一个 / 独占。

【讨论】:

  • 感谢您的回答。我不需要点的反斜杠吗? customer1 就是一个例子。在实践中,它将是“toto”、“customer1”、“xyz”……但对于 localhost 实际上是一个测试。 jboss rewrite valwer 和 UrlRewriterFilter 有什么区别?谢谢你的日志提示。我今晚试试。
  • 如果 customer1 是一个例子,其他例子是什么?或者更好 - 您想使用RewriteRules 表达的一般规则是什么?
  • 与 UrlRewriterFilter 的区别 - 好吧,它是一种不同的实现,所以一个不起作用的东西可能适用于另一个......但通常我宁愿打赌 JBoss 一个。
  • 例如:localhost:8443/test/john/login.xhtml, localhost:8443/test/mike/login.xhtml, .. 抱歉,遗憾的是我仍然没有时间测试。也许今晚或明天!非常感谢您的帮助!
  • 啊,我明白了。我认为您想将字符串“customer1”拆分为“customer”和“1”:) 好的,在这种情况下,它更简单 - 我会尝试删除 $ 并使用 ([A-Za-z0-9]+) 限制字符,或者([^/]+),或其他类定义。
【解决方案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

【讨论】:

  • 很有趣,我会尽快测试的!!我认为“$”是在第二部分中使用 $1 所必需的。谢谢
  • 是的,$ 是右侧的锚点。是括号() 让您在第二部分中使用$1
猜你喜欢
  • 1970-01-01
  • 2014-08-22
  • 1970-01-01
  • 2014-07-16
  • 1970-01-01
  • 2014-01-05
  • 2012-04-16
  • 2014-05-01
  • 2013-03-15
相关资源
最近更新 更多