3

我在网站上有以下规则将 http 重定向到 https。我们刚刚发现,我们的应用程序仅使用 api 的 http 提交。在我们得到更新之前,我需要网站忽略对 /api 文件夹的调用,只重定向其他所有内容。我确信有一种方法可以说如果 URL 不包含 /api/ 然后重定向。

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

2 回答 2

2

添加一个类似的条目,<add input="{R:0}" pattern="/api(/|$)(.*)" negate="true" />以便整个文件为:

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

示例网址:http://site.com/api/function

因此,如果站点之后的 URL 与以下任何一个匹配,它将停止处理(因此不会将用户推送到 https)

  • /api
  • /api/anything
  • 任何https网址

我们在反向代理后面的 IIS 中运行大型应用程序时遇到了同样的事情。IIS 的 URL 重写插件(您似乎正在使用)有点痛苦,但它做得非常好并且可以容忍 MVC 框架。

正如您所提到的,简单地将重写块放在 API 目录中是行不通的,因为使用 MVC 没有目录。您会认为 MS 对此会有更好的解决方案——但他们没有。它使事情变得更具挑战性。

于 2012-12-29T23:25:05.697 回答
1

如果您在 /api 应用程序或目录中放置一个单独的Web.config 文件,您可以覆盖适用于整个站点的任何规则。

查看本文中的提示 #1,如果您有时间阅读它们:

http://weblogs.asp.net/jgalloway/archive/2012/01/17/10-things-asp-net-developers-should-know-about-web-config-inheritance-and-overrides.aspx

John Galloway 的博客是有关 IIS 和 ASP.NET 的绝佳资源。

于 2012-12-29T22:25:26.610 回答