将apache重写规则转换为IIS web.config

时间:2014-09-04 13:18:34

标签: asp.net iis web-config rewrite

我正在尝试将此apache重写规则转换为web.config规则,但我无法让它工作。

基本上它会检查用户代理并将代理重定向到提供的URL

# allow social media crawlers to work by redirecting them to a server-rendered static      version on the page
RewriteCond %{HTTP_USER_AGENT (facebookexternalhit/[09]|Twitterbot|Pinterest|Google.*snippet)
RewriteRule qs/(\d*)$ http://sitetocrawl.com/doc?id=$1 [P]

这是我到目前为止所拥有的。但是,我无法弄清楚如何捕获url querystring参数。基本上是http://example.com/qs/parameter

之后的文本字符串
<rule name="Social Rewrite" patternSyntax="ECMAScript" stopProcessing="true">
<match url="urltomatchpattern" ignoreCase="true" negate="false" />
<conditions logicalGrouping="MatchAny" trackAllCaptures="false">
  <add input="{HTTP_USER_AGENT}" pattern="facebookexternalhit/[0-9]|Twitterbot|Pinterest|Google.*snippet" />
 </conditions>
 <action type="Redirect" url="http://sitetocrawl.com/doc?parameter" appendQueryString="true" redirectType="Found" />
</rule>

修改

我尝试了许多更简单的规则变体,例如当特定用户代理请求网站时重定向/重写(在我的情况下,是facebook抓取工具)。但我甚至无法使这些规则奏效。我正在使用Facebook OG debugger

进行调试
  <rule name="Rule1" stopProcessing="true">        
      <match url=".*" /> 
      <conditions> 
        <add input="{HTTP_USER_AGENT}" pattern="facebookexternalhit/1.1|Facebot" /> 
      </conditions> 
      <action type="Redirect" url="new url here" />       
  </rule>   

1 个答案:

答案 0 :(得分:0)

不是答案,而是起点。 IIS管理器(Windows 8.1上的IIS 8)将您的apache mod_rewrite规则转换为稍微不同的配置:

<rewrite>
  <rules>
    <rule name="Imported Rule 1" stopProcessing="true">
      <match url="qs/(\d*)$" ignoreCase="false" />
      <conditions>
        <add input="%{HTTP_USER_AGENT" pattern="(facebookexternalhit/[09]|Twitterbot|Pinterest|Google.*snippet)" ignoreCase="false" />
      </conditions>
      <action type="Rewrite" url="http://sitetocrawl.com/doc?id={R:1}" appendQueryString="false" />
    </rule>
  </rules>
</rewrite>

我发现它是重写而不是重定向,但请检查这是否适用于您的方案。如果它有效,您可以开始更改它直到达到预期的结果。

现在我看到你的主要网址匹配模式只是urlmatchpattern,这当然不是一种模式,是你的规则不起作用的根本原因。