如何使用URL重写规则过滤网址

时间:2014-02-24 09:36:24

标签: asp.net-mvc-3 c#-4.0 ssl url-rewriting

<rewrite>
  <rules>
   <rule name="HTTP to HTTPS redirect" enabled="true" stopProcessing="true">
       <match url="(.*)" ignoreCase="true" />
         <conditions>
          <add input="{HTTPS}" pattern="OFF" />
         </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
         </rule>
      </rules>
  </rewrite>

我在web.config文件中使用了上面的url重写规则来为整个站点启用SSL。 现在我需要更改上面的规则来过滤2个应该作为http工作的URL。 我们将这些网址称为https://www.domain.com/owner/Marketinghttps://www.domain.com/owner/getinfo。 目前这些网址是https因此高于规则。那么如何更改上述规则以过滤2个网址(即http://www.domain.com/owner/Marketinghttp://www.domain.com/owner/getinfo)?

1 个答案:

答案 0 :(得分:1)

我会添加一个单独的规则来排除不应重定向到https的网址。

我现在无法测试,因为手边没有IIS7。但试一试:

<rewrite>
  <rules>
    <rule name="Skip HTTPs" enabled="true" stopProcessing="true">
      <match url="^(Marketing|getinfo)" ignoreCase="true" />
      <conditions>
        <add input="{HTTPS}" pattern="OFF" />
      </conditions>
      <action type="None" />
    </rule>
    <rule name="HTTP to HTTPS redirect" enabled="true" stopProcessing="true">
      <match url="(.*)" ignoreCase="true" />
      <conditions>
        <add input="{HTTPS}" pattern="OFF" />
      </conditions>
      <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Found" />
    </rule>
  </rules>
</rewrite>

请注意,您必须根据示例将该文件放入/ owner /目录。

你可能已经看过这方面的文件 - 只是指出我找到它的地方:

http://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module

此处可能使用前瞻性正则表达式规则重复该问题:Rewriting URLs in IIS7