[英]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):
現在,所有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 Redirect
到https://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.