2012-12-29 63 views
1

我在網站上有以下規則將http重定向到https。我們只是發現,雖然我們的應用程序只提供了一個http爲api。直到我們可以得到這個更新,我需要該網站忽略對/ api文件夾的調用,並且只重定向其他所有內容。我確定有一種方法可以說明如果URL不包含/ api /然後重定向。IIS 7上的條件https重定向

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

回答

1

添加類似<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 URL

我們碰上了這樣的事情,在IIS中的大型應用程序運行背後的反向代理。 IIS的URL重寫插件(您似乎正在使用)有點痛苦,但它確實做得很好,並且容忍了MVC框架。

正如您所提到的,只需將重寫塊放入API目錄中將無法工作,因爲使用MVC時不存在目錄。你會認爲MS會有更好的解決方案 - 但他們沒有。它使事情變得更具挑戰性。

1

如果你把一個單獨 Web.config文件在/ API應用程序或目錄,你可以覆蓋任何規則適用於該網站作爲一個整體。

退房提示#1這篇文章,如果你有時間閱讀它們:

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

約翰·加洛韋的博客是所有的東西IIS和ASP.NET一個夢幻般的資源。

+0

這將工作,除了這是一個MVC應用程序,所以技術上沒有API目錄。 – Jhorra

+0

我明白了!作爲一個快速解決方案,您可以在「匹配網址」字段中使用正則表達式並編寫特定於API的規則。 –

+0

這就是我的想法,我只是不知道如何編寫正則表達式部分。 – Jhorra