2012-01-30 89 views
1

我使用URL重写将ci.pl的所有请求发送到我创建的代理(请求具有ci.pl,然后重定向到:/ proxy/handler .ashx;追加查询字符串:是)。很棒。显然有一个很老的客户端应用程序,发送以下请求:http://webserver.com/ci.pl%3F4+505000+0+0+5无法在URL中获取IIS URL重写句柄%3F

当它应该是发送: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> 

回答

1

以下为我工作:

匹配URL

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

行动

这是怎么运行的。 MATHES的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,产生结果http://myserver.com/ci.pl?4+505000+0+0+5如预期。

这里的配置文件片段:

<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> 

希望这有助于。

+0

嗯...您建议的表达式在我的本地服务器上似乎无法解析。当我使用URL重写模块测试一个url(http://localhost/ci.pl%3F4+505000+0+0+5)时,它返回“输入数据要测试与模式不匹配”​​。 – 2012-01-30 22:44:23

+0

虽然这是正确的RegEx不能通过URL重写模块**测试**对话框解析,它看起来像请求被正确识别并发生重定向。问题解决了! – 2012-01-30 23:00:28

+0

@RichScannell:在这种情况下,正则表达式试图仅匹配URL的路径部分(即,最后一个'/'和查询字符串之前的所有内容,请参阅http://en.wikipedia.org/wiki/URI_scheme#Examples) ,因此你必须在测试对话框中输入以下内容:'ci.pl%3F4 + 505000 + 0 + 0 + 5' – 2012-01-30 23:50:45