設計賓至如歸的HTTPS強制導向網頁
有個網站有較嚴的資安要求,因此在IIS管理員中將其設為必須使用SSL連線,當使用者使用HTTP而非HTTPS連線時,會看到403拒絕存取的錯訊訊息,不太友善:
403 - Forbidden: Access is denied.
You do not have permission to view this directory or page using the credentials that you supplied.
嚴格說起來,這個訊息回應不夠人性,未導引使用者解決問題,所以我們來試做一個讓使用者有賓至如歸感受的HTTPS強制導向服務。
必須使用SSL的錯誤回應碼是403.4,我們可以為它寫一個專屬自訂錯誤網頁,以文字提醒使用者要將http改為https;若使用者懶得打字修改URL,網頁還提供了一個連結,點下去就能立刻改連https版本的URL;若使用者已修練到"眼前的餅吃完也懶得轉圈"的極致境界,則也可以選擇什麼都不要做,繼續癱在椅子上喘10秒鐘,網頁暗藏了Script,先倒數10秒,再自動將網頁導向到https版的URL。相信這樣的設計,其賓至如歸的程度,應該直逼【踏進百貨公司時,20位SOGO小姐羅列兩排向你90度鞠躬,並嗲聲齊喊歡迎光臨】的水準。

自訂錯誤網頁的程式如下:
<html><head><title>網頁需要安全連線</title>
<script type="text/javascript">
function showMsg() {
var cnt = 10;
var sslUrl = location.href.replace(/^http/i, "https");
document.getElementById("lnkSSL").href = sslUrl;
setInterval(function() {
if (--cnt >= 0)
document.getElementById("spnCountDown").innerHTML = cnt;
else
location.href = sslUrl;
}, 1000);
}
</script>
<style type="text/css">
div
{
background-color: #cccccc; border: 2px solid black;
padding: 5px; width: 300px; line-height: 150%;
font-size: 11pt;
}
#spnCountDown { color: red; padding: 4px; }
</style>
</head>
<body onload="showMsg();">
<div>
本網站限定使用SSL加密連線!<br />
請將網址之http://改為https://後重新連線,
亦可點選<a id="lnkSSL">這裡</a>直接改用加密連線。<br />
或請稍候<span id="spnCountDown">10</span>秒,
由系統為您自動轉接。
</div>
</body></html>
接著我們要用這個網頁取代預設的403.4錯誤回應,以IIS7為例,將這個網頁存成SSLRedirect.htm,放在Web Application的根目錄下,並設定web.config如下(亦可使用IIS管理員GUI設定)。當使用者因未使用SSL被拒產生403.4錯誤時,就會改顯示上述網頁,讓使用者體驗VIP級的親切服務囉!
<httpErrors>
<error statusCode="403" subStatusCode="4" path="SSLRedirect.htm" responseMode="File" />
</httpErrors>
</system.webServer>