无法在URL中获取IIS URL重写句柄%3F

时间:2012-01-30 17:44:35

标签: url iis rewrite

我正在使用URL Rewrite将 ci.pl 的所有请求发送到我创建的代理(请求已经ci.pl然后重定向到:/proxy/handler.ashx;追加查询字符串:是)。效果很好。显然,有一个非常老的客户端应用程序发送以下请求:http://webserver.com/ci.pl%3F4+505000+0+0+5

何时发送:http://myserver.com/ci.pl?4+505000+0+0+5

最终发生的是 ci.pl 规则重定向到代理,但由于收到%3F 重定向中不包含任何参数。

我无法更新旧版客户端应用,因此我一直在努力想出一个网址重写规则,以检测%3F +沿<\ n>右边的字符串传递强>%3F 即可。有没有人做过类似的事情?

这是一个接近的配置,但%3F 右侧的字符串未传递给代理。

<rewrite>
    <rules>
        <clear />
        <rule name="Handle %3F" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
            <match url="*" />
            <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
                <add input="{QUERY_STRING}" pattern="*ci.pl%3F*" />
            </conditions>
            <action type="Redirect" url="/proxy/handler.ashx?{C:2}" appendQueryString="false" />
        </rule>
        <rule name="Detect CI.PL">
            <match url="(.*)" />
            <conditions>
                <add input="{PATH_INFO}" pattern="ci.pl" />
            </conditions>
            <action type="Rewrite" url="/proxy/handler.ashx" />
        </rule>
    </rules>
</rewrite>

1 个答案:

答案 0 :(得分:1)

以下对我有用:

匹配网址

  • 请求的网址:匹配模式
  • 使用:正则表达式
  • 模式:^ci\.pl(%3f|\?)(.*)
  • 忽略案例:是

<强>动作

这是它的工作原理。上面的正则表达式以URI ci.pl开头,然后是%3f?,其后带有一系列任意字符。捕获序列,稍后可称为{R:2}(2表示“从左侧开始的第二组括号”)。

例如,如果URI为http://webserver.com/ci.pl%3F4+505000+0+0+5,则{R:1}和{R:2}将分别保留%3F4+505000+0+0+5,从而生成结果{{3}如预期的那样。

这是配置文件片段:

<rewrite>
    <rules>
        <rule name="ci" stopProcessing="true">
            <match url="^ci\.pl(%3f|\?)(.*)" />
            <action type="Redirect" url="http://myserver.com/ci.pl?{R:2}" appendQueryString="false" />
        </rule>
    </rules>
</rewrite>

希望这有帮助。