有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JBoss AS 7中的java重写规则

我在《重写》中成功地玩了《重写规则》。财产

现在,我想重写如下url:

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

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

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

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

不幸的是,它不起作用。找不到该页。有人有主意吗

你知道重写后我如何记录或查看结果url吗


共 (2) 个答案

  1. # 1 楼答案

    你能把你的信寄出去吗。属性文件

    以下是JBoss网站docs for rewrite.properties(供他人参考)

    如果你没有找到解决办法,试试UrlRewriteFilter

    但仔细看看您的regexp,似乎需要进一步研究这一问题。 我建议不要使用customer1but 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
    

    也就是说,从上下文根到第一个/排他

  2. # 2 楼答案

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

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

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

    首先,这个规则不匹配,因为在字符串中间的^ {CD2>}应该标记请求字符串的结尾。之后的一切都是无关的。让我们把它拿出来:

    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