无法为Mod Rewrite/URLRewriteFilter构建正确的正则表达式.如何否定范围



我在构建这样一个简单的规则时遇到了问题。只有当类1变量不在4000和5999之间时,我才想清除URL。

当用户转到f?p=3999:1:1:::::时,我希望用户被引导到/3999/1?vars=:1:::::。如果用户转到f?p=4000:1:1:::::,则URL将不会被清除。

以下是我迄今为止所掌握的信息。这是我想要的,除了范围。有人请帮忙!:

<rule match-type="regex">
    <note>
        FROM= URL typed in by user
        TO= URL user is redirected to.
    </note>
    <from>^/f?p=([0-9A-Za-z]+):([0-9A-Za-z]+):([0-9A-Za-z]*)(.*)$</from>
    <to type="redirect">/$1/$2?vars=$3$4</to>
</rule>

使用Lindrian提供的解决方案,我能够将其插入到代码中以获得所需的结果。

最终解决方案:

<rule match-type="regex">
<note>
    FROM= URL typed in by user
    TO= URL user is redirected to.
</note>
<from>^/f?p=((?:[0-3]|[6-9])[0-9]*|[54]d{4,}):([0-9A-Za-z]+):([0-9A-Za-z]*)(.*)$</from>
<to type="redirect">/$1/$2?vars=$3$4</to>

我在这里所做的是使用URLReportFilter来清理oracle应用程序的express URL。这里的问题是,APEX使用的是相对引用,所以如果你登录到APEX,链接页面现在将查找$1/f?p…作为链接页面。这是错误的,因为$1不存在!因此,我关闭了开发UI 的URL清理

我不能帮助您编写mod重写代码,但我可以帮助您编写正则表达式。尽管regex不是做这类事情的最佳工具,但它是可以做到的。

我创建了一个简短的简单正则表达式,它匹配除40005999范围内的数字之外的所有数字:http://regex101.com/r/aU5qC4

我希望你能用你的其他代码来实现这一点。

祝你好运。

最新更新