簡體   English   中英

IIS HTTP到HTTPS相對重定向

[英]IIS HTTP to HTTPS relative redirect

我最近獲得了我的網站的SSL證書,並希望將所有流量重定向到HTTPS。 我得到了一切去https://mydomain.com但如果有人進入http://mydomain.com/anotherpage它會刪除另一頁,只是將用戶帶到主頁。

我的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版本的頁面? 我覺得它與模式有關,但我似乎無法弄清楚語法。

我找到了一種方法,你不需要Rewrite模塊。
以下適用於Windows 8(IIS 8.5):

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

在此輸入圖像描述

現在,所有HTTP請求都將重定向到您的HTTPS站點,並將保留URL的其余部分。

將其更改為:

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

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

設置完成后,重定向將始終以此URL結尾:

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

對此的修復是在Adobe線程( https://forums.adobe.com/thread/1034854 )中找到的:我必須更改應用程序池的設置,如下所示:

真實站點(僅限HTTPS綁定,實際上包含代碼和虛擬目錄)應用程序池的高級設置: Enable 32-Bit Applications : False

Http_Redirect站點(僅限HTTP綁定,是沒有目錄的文件夾的空白shell)應用程序池的高級設置: 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的框。 然后它也會保存查詢字符串。

我有同樣的問題, 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>

我相信AndyH的答案是最簡單和最好的方式。 我發現使用URL重寫也可能與可能將用戶重定向到另一個頁面的代碼沖突。 IT通常在我們的環境中破裂。 但安迪的解決方案運作完美無缺。 我還認為Andy的解決方案會減少服務器上的開銷,因為它不需要檢查每個URL是否有可能重寫條件。


我找到了一個解決方法:

考慮一下IIS中的一個網站:簡單的一組規則,獲取文件及其綁定的路徑。

此外,還有一個名為“ HTTP重定向 ”的功能(在IIS中標准配置),它將主機重定向到另一個主機,保留所有子目錄(它構成一個相對路徑)。 解決方法是在您的網站中僅保留HTTPS(端口443)的綁定,並使用HTTP上的綁定(端口80)創建另一個綁定,並使用https://為您的URL設置HTTP重定向。

例如,考慮一個名為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 url一樣快,因為它只是一個內部重定向。 我希望能為你效勞!

您可以將URL重寫模塊添加到IIS(IIS 7或更高版本),這允許您以可視方式添加創建重定向。 該模塊可以在這里下載。

這個循序漸進的教程為我創造了奇跡並解釋說,在使用這個模塊時,它實際上所做的就是在web.config文件中添加一些代碼:

<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}" redirectType="SeeOther" />
        </rule>
    </rules>
</rewrite>

我發現了

<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />

語法僅適用於網站的ROOT web.config文件。

如果重寫規則應用於虛擬web.config文件,則使用..

<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{URL}" />

{URL}語法將包括初始正斜杠,虛擬路徑和任何URL參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM