再遇到老題目:在 IIS 上如何將 HTTP 請求強制導向 HTTPS?

之前試過顯示說明網頁,倒數後透過 JavaScript location.href 轉向 HTTPS 的做法 - 設計賓至如歸的HTTPS強制導向網頁

但這有個缺點,如果不需要顯示導向提示,則先 HTTP 200 送回正常網頁再由瀏覽器另外發出請求連上 HTTPS 多耗費一次往返,不如直接回傳 HTTP 301/302 導向有效率,而連上 HTTP 時回應 HTTP 200 還可能會被搜尋引擎誤判為有效網址。

網路建議的解法多是使用 URL Rewrite 模組解決,例如保哥強迫網站轉向到 HTTPS 加密安全連線 ( IIS URL Rewrite )一文提到的做法。

之前的情境都是原本 HTTP 舊站啟用 HTTPS 後希望大家改連加密版,這回的狀況是網站一上線就只有 HTTPS,只需將誤連 HTTP 的使用者導向 HTTPS,不需將 HTTP 完整路徑對應成 HTTPS 版本。基於導向入口網頁不需完整對應的單純需求,我找到一個不用安裝 URL Rewrite 的簡便做法。

首先在 IIS 管理員確認勾選「SSL設定 / 需要SSL」,如此連上 HTTP 將得到 HTTP 403.4 錯誤。

接著在「錯誤網頁」指定 403.4 錯誤訊息網頁:

指定自訂錯誤網頁時使用「回應 302 重新導向」並輸入 https: 版首頁。

以上設定也可透過 web.config 加入:

    <system.webServer>
        <httpErrors>
            <error statusCode="403" subStatusCode="4" 
path="https://www.my-site.com.tw/" responseMode="Redirect" />
        </httpErrors>
    </system.webServer>

這方法還有一個小瑕疵,它傳回的是 302(暫時搬移) 不是 301(永久遷移),可能影響搜尋引擎判斷。餏據爬文結果:1) 若原本 HTTP 網址沒有內容,不致有被 Cache 住遲遲沒更新的疑慮 2) 由於業界太多人把 302 當 301 用,Google 已經聰明到將 302 視為 301。參考:302 Redirect vs. 301 Redirect- Which is Better- - Hochman Consultants


Comments

Be the first to post a comment

Post a comment


79 + 19 =