我正在使用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>
答案 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}将分别保留%3F
和4+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>
希望这有帮助。