2009-10-08 179 views
33

我試圖從形式重寫URL:從https重寫URL://到http://在IIS7

https://example.com/about 

的形式

http://example.com/about 

使用IIS7 URL rewriting

<!-- http:// to https:// rule --> 
<rule name="ForceHttpsBilling" stopProcessing="true"> 
    <match url="(.*)billing/(.*)" ignoreCase="true" /> 
    <conditions> 
    <add input="{HTTPS}" pattern="off" ignoreCase="false" /> 
    </conditions> 
    <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{REQUEST_URI}" /> 
</rule> 

<!-- https:// to http:// rule -->  
<rule name="ForceNonHttps" stopProcessing="true"> 
    <match url="(.*)billing/(.*)" ignoreCase="true" negate="true" /> 
    <conditions> 
     <add input="{SERVER_PORT}" pattern="^443$" /> 
    </conditions> 
    <action type="Redirect" redirectType="Found" url="http://{HTTP_HOST}{REQUEST_URI}" /> 
</rule> 

我不知所措;我一直在瀏覽網頁的例子,並嘗試我能想到的每一種語法。對於任何https請求,我所指定的重寫規則根本不會工作,全部爲,好像所有的https://請求對於重寫引擎都是不可見的。

規則正常工作;見下面的答案。

+0

對我來說,氣味就像一個基本的安全'功能' – 2009-10-08 08:05:02

+0

這對我來說就像一個服務器故障問題... – 2009-10-08 08:47:02

+0

@Charlie,no。這是編碼和管理問題之一,所以請將其留在它開始的網站上(如很多腳本問題) – 2009-10-08 10:18:54

回答

25

原來,我有端口:443綁定到不同的網站!

上述重寫規則對http://正確地工作到https://重寫,反之亦然 - 雖然可能有更優化或簡單的方法來完成它。

在這裏讓這個問題留給未來的航行者來發現,因爲我沒有在網上看到https:// http://重寫場景的很多好例子。

+1

Ouch。在這裏爆炸頭。 O – 2009-10-08 13:25:06

+1

我發現使用上述https規則導致我的https頁面上的所有CSS,JavaScript和圖像資源都被作爲http獲取。我放棄了這個規則,並添加了一個出站規則,將我的安全頁面上的href標記重寫爲http:// {HTTP_HOST}/{R:0},強制從https轉換爲http。不會無意中手動導航到使用https的非安全頁面,但這對我來說很好 – 2011-01-25 01:13:54

+0

Pat James,我也遇到過這個問題。你介意分享你的出站規則嗎? – StronglyTyped 2012-02-06 19:18:53

1

您的解決方案工作,但問題是:您的第二條指令殺死任何鏈接的第一條指令不是(。)billing /(。),包括您的css,js和圖像。

您可以使用此HTTPS到http規則:

<rule name="HTTPS to HTTP redirect" stopProcessing="true"> 
<match url="(.*)" /> 
<conditions> 
<add input="{RequiresSSL:{R:1}}" pattern="(.+)" negate="true" /> 
<add input="{HTTPS}" pattern="on" ignoreCase="true" /> 
<add input="{REQUEST_URI}" pattern="^(.+)\.(?!aspx)" negate="true" /> 
</conditions> 
<action type="Redirect" redirectType="Found" url="http://{HTTP_HOST}/{R:1}" /> 
</rule> 
5

這個職位是有點老了,但我想回答。我正在使用ASP.Net MVC3,而Fabio上面的回答對我並不適用。我想出了一個最簡單的方法來處理HTTPS重定向到HTTP,同時仍允許有效的HTTPS頁面請求安全內容只是加入我上面的HTTPS/HTTP白名單規則重定向:

<rule name="WhiteList - content folder" stopProcessing="true"> 
     <match url="^content/"/> 
     <conditions logicalGrouping="MatchAll" trackAllCaptures="false"/> 
     <action type="None"/> 
    </rule> 
    <rule name="Redirect to HTTPS" stopProcessing="true"> 
     <match url="(.*)billing/(.*)" ignoreCase="true" /> 
     <conditions> 
     <add input="{HTTPS}" pattern="^OFF$" /> 
     </conditions> 
     <action type="Redirect" url="https://{HTTP_HOST}/billing/" redirectType="SeeOther" /> 
    </rule> 
    <rule name="ForceNonHttps" stopProcessing="true"> 
     <match url="(.*)billing/(.*)" ignoreCase="true" negate="true" /> 
     <conditions> 
     <add input="{SERVER_PORT}" pattern="^443$" /> 
     </conditions> 
     <action type="Redirect" redirectType="Found" url="http://{HTTP_HOST}{REQUEST_URI}" /> 
    </rule> 
0

請首先考慮結合 HTTPS到您的網站下面進行重定向模塊來工作是必不可少的

最終在web.config中的一部分(以便與自簽名有效證書綁定您的Web應用程序)重定向HTTPSHTTP

<rewrite> 
    <rules> 
     <rule name="Force NonHTTPS" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions> 
       <add input="{HTTPS}" pattern="on" /> 
      </conditions> 
      <action type="Redirect" url="http://{HTTP_HOST}/{REQUEST_URI}" /> 
     </rule> 
    </rules> 
</rewrite> 

如果需要在重寫模塊的等效IIS GUI見下文圖像

enter image description here

源:看tech-net爲一步引導更多的細節和步驟。

+0

也看到這篇文章https://serverfault.com/q/292374/105675 – 2017-05-13 06:53:55