【发布时间】:2012-02-22 12:10:31
【问题描述】:
我正在使用 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重定向中不包含任何参数。
我无法更新旧版客户端应用程序,因此我一直在尝试提出一个 URL 重写规则来检测 %3F + 将字符串传递到 %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>
【问题讨论】: