2013-04-02 135 views
12

我最近爲我的網站獲得了SSL證書,並且希望將所有流量重定向到HTTPS。我得到了一切去https://mydomain.com,但如果有人輸入http://mydomain.com/anotherpage它放棄其他頁面,並只需要用戶到主頁。IIS HTTP到HTTPS相對重定向

我在我的web.config文件規則是這樣的:

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

我也試過https://{HTTP_HOST}{REQUEST_URI}沒有任何成功。任何人都可以告訴我,我需要做些什麼來使網站重定向到正確的HTTPS版本的頁面?我有一種感覺,它與模式有關,但我似乎無法弄清楚語法。

+0

我認爲它與後面的參考有關。如果將模式更改爲'url =「。*」',並重寫爲'url =「https:// {HTTP_HOST}/{R:0}」',會怎麼樣? – cheesemacfly

+0

仍然會將所有內容重新導向至主頁。 – user2234612

+0

這真的很奇怪。你將不得不使用[失敗的請求追蹤](http://www.iis.net/learn/extensions/url-rewrite-module/using-failed-request-tracing-to-trace-rewrite-rules)工具來看問題來自哪裏。 – cheesemacfly

回答

5

將其更改爲:

<rewrite> 
    <rules> 
     <rule name="Redirect to HTTPS" stopProcessing="true"> 
     <match url="(.*)" /> 
     <conditions> 
      <add input="{HTTPS}" pattern="^OFF$" /> 
     </conditions> 
     <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" /> 
     </rule> 
    </rules> 
</rewrite> 
+2

這裏的關鍵變化是什麼? 'pattern =「^ OFF $」'? – Zapnologica

12

我發現了一個辦法做到這一點,你不需要爲它的重寫模塊。
以下爲我工作在Windows 8(IIS 8.5):

  1. 刪除HTTP從您的網站結合(離開HTTPS到位)
  2. 添加其他網站
  3. 確保新網站具有HTTP結合
  4. 配置HTTP重定向,如下所示:

enter image description here

現在人l HTTP請求將重定向到您的HTTPS站點,並保留URL的其餘部分。

+0

驚豔的解決方案 - 如果有效。去嘗試一下。 – Riz

+0

真棒工作!也能夠綁定一個IP地址重定向到https!謝謝! – Riz

0

我相信AndyH的答案是最簡單和最好的方法。我發現使用URL重寫也可能會與可能將用戶重定向到其他頁面的代碼發生衝突。 IT通常在我們的環境中破碎。但安迪的解決方案完美無瑕。我還認爲Andy的解決方案將減少服務器的開銷,因爲它不需要檢查每個URL是否存在可能的重寫條件。

1

我還不能評論,或者我會在AndyH的回答下留下評論。解決方案是正確的,儘管我遇到了一個進一步的障礙(可能與使用Adobe的Coldfusion服務器有關)。我想分享一些進一步的研究,我必須爲可能遇到它的任何其他不幸的靈魂做些進一步的研究。

一旦成立,重定向總是在這個網址結尾:

https://xxx.xxx.com/jakarta/isapi_redirect.dll 

對此問題進行修復是在一個Adobe線程(https://forums.adobe.com/thread/1034854)發現:我不得不改變一個應用程序池的設置如下:

真正的網站(HTTPS唯一有約束力的,實際上包含的代碼和虛擬目錄) 應用程序池的高級設置:Enable 32-Bit Applications : False

Http_Redirect網站(HTTP綁定只,是AB文件夾的平直外殼沒有目錄) 應用程序池的高級設置:Enable 32-Bit Applications : True


編輯:另一個細節,綁查詢字符串保存:

每建議在這個職位(http://www.developerfusion.com/code/4678/permanent-301-redirect-with-querystring-in-iis/

在域的末尾添加$S$Q,並確保已選中Redirect all requests to exact destination的框。然後它將保存查詢字符串。

1

我有同樣的問題,R:1刪除我的文件夾。 我修正了這個問題。

<rule name="http to https" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions> 
     <add input="{HTTPS}" pattern="^OFF$" /> 
    </conditions> 
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" 
      appendQueryString="false" redirectType="SeeOther" /> 
</rule> 
0


我找到了一個解決辦法:

考慮一下在IIS中consired網站:只需一組規則,路徑中獲取文件和其綁定。

此外,還有一個可調用的函數「HTTP重定向」(標配的IIS列入),重定向的主機之間,保持所有子目錄(它使相對路徑)。解決方法是僅在您的網站中留下HTTPS(端口443)的綁定,並使用HTTP(端口80)上的綁定創建另一個綁定,併爲此設置一個HTTP重定向到您的URL並使用https://

例如,考慮一個名爲mytest的網站及其網址http://www.mytest.com/https://www.mytest.com/。 爲它設置而不是僅在https://www.mytest.com/上綁定,並刪除http綁定。然後創建一個具有相同本地路徑的新網站,名爲mytest http,僅通過端口80(http://www.mytest.com/)進行綁定,併爲此設置爲HTTP Redirecthttps://www.mytest.com/
簡單,乾淨,應該和用戶的https網址一樣快,因爲它只是一個內部重定向。我希望能爲你效勞!