如何编写正则表达式从URL中删除最后一个参数

时间:2014-02-19 01:48:45

标签: regex iis rewrite

我正在尝试为IIS创建URL重写入站规则,以便在特定参数之前返回URL。

编辑:我应该声明authProvider始终是最后一个参数。

示例:

http://localhost/WebAccess/Default.ashx?accessionNumber=009&authProvider=Bypass

我想从网址末尾删除& authProvider = Bypass

我试过了:

.*(?=&authProvider)

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="Test" enabled="true">
                    <match url="(.*)&amp;authProvider.+" />
                    <action type="Rewrite" url="{R:0}" logRewrittenUrl="true" />
                </rule>
            </rules>
        </rewrite>

    </system.webServer>
</configuration>

enter image description here

1 个答案:

答案 0 :(得分:1)

您显示的示例将与您想要的匹配,但不会更改URL。匹配的结果应该包含您想要的匹配字符串作为结果。

我认为问题可能在于您尝试替换匹配的内容,但是由于正向查找(?=不是匹配结果的一部分)当您执行替换时,您最终会遇到你开始时的字符串相同。作为替代方案,假设您知道如果参数顺序发生变化,这将不会非常强大,您可以使用:

(.*)&authProvider.+

然后用

替换
$1

这将导致:

http://localhost/WebAccess/Default.ashx?accessionNumber=009

基本上它匹配整个字符串并将其替换为$ auth之前的所有内容,它位于组1($1)中。

<强>更新

通过更新,我发现重写规则语法使用{R:1},因此在我的示例中$ 1应该是{R:1},而在Rewrite Rule中应该是{R:1}。有关示例,请参阅here