[htaccess]如何強制把 HTTP 導向 HTTPS,打造更安全的加密網站

使用 .htaccess 來強迫讓 HTTP 轉為 HTTPS
使用 .htaccess 來強迫讓 HTTP 轉為 HTTPS

網路不是一個很安全的環境,這點大家應該都非常清楚了。


在過去,一個加密網站(以HTTPS為首的網址)通常都是商業網站或是大型網站為主,
像是有提供線上交易的電子商務類網站,或是有會員專區的那些服務型網站,
雖然近年來很多網路專家一直呼籲網路管理員或網站站長們,
希望大家盡可能的將自家管理的網站,從 HTTP 升級到 HTTPS,成效其實普普。
倒是 Google 一出手,先是在他們自家瀏覽器 Chrome 的網址列上,直接大剌剌的告訴全世界,你的網站『不安全』,
接著又公布說那些沒有加密為 HTTPS 的網站搜尋排名將會調降,
就這樣很快的,
升級為 HTTPS,就成了所有網站管理員們的集體大作戰 XD


當然了,我們五分鐘閱讀的網站也不例外的改為了 HTTPS(https://km.nicetypo.com)。


用 .htaccess 檔案強制將 HTTP 導向 HTTPS


在整個從 HTTP 轉換到 HTTPS 網站的過程中,最重要的一項工作,當屬如何強制把每一個 HTTP 來的流量,導向到 HTTPS 的版本,這個強制 HTTP 轉 HTTPS 任務絕對可以說整組計畫裡的重中之重。


特別是已經服務上線有一段時間的網站,
不管是搜尋進來的流量、
還是其他網站的逆向連結(Referral link)連過來的流量、
即便原本網站上不同文章之間的內部連結,都還是維持舊的 HTTP 的版本。


如果不強制把這些流量都導向到新的 HTTPS 網頁,
那麼不僅僅升級無效,還有可能因而產生更多的錯誤。


更更糟糕的還有,
如果沒有這麼做的話,那麼就等同於你的網站很多的頁面都同時存在兩個版本:一個是 HTTP 版本,另一個則是 HTTPS 的版本,因為就網址而言,多了一個s,就是一個新的網址,那麼一個網站有很多的重複頁面,對於 SEO 來說可不是見好事呢!


這就是為什麼要反覆說強制轉址是這麼的重要了。


下面的範例就是如何使用 .htaccess 的檔案,來強制把 HTTP 導向 HTTPS:


RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

上面這個程式碼第一行:RewriteCond %{HTTPS} off,
就是先對主機宣告說凡是進來的流量,是以 HTTPS 為首的,就不管他,只處理不是 HTTPS 開頭的連線要求。


第二行就是強迫轉址的敘述:RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]。
這段敘述主要是說,所有的連線要求(當然已經扣掉了之前宣告過的 HTTPS流量),都把要求的網址重寫一次,將 HTTP 改為 HTTPS。
最後端的 [R=301,L],則是說轉址(R)是以 301(永久轉換)的模式來轉換。
L 則是指如果之前的動作完成了,就到這裡結束,後面還有其他什麼程式碼的就不關我的事了。


同時大家也可以參考我們之前寫的另一篇關於轉址的教學文章
[htaccess]把www的網址永遠轉址到non-www

只要把上面的文字,複製到網站根目錄的 .htaccess 裡面就可以了(記得第一段 RewriteEngine On如果已經有的話,就不用重複貼入)。


HTTP 轉向 HTTPS 的後續檢查工作清單


除了上面的強制轉址以外,升級為 HTTPS 之後,還有很多後續的動作也別輕忽喔。


因為光光是網址改了還不算完全的大功告成,
後續還有一些雜七雜八的小動作要做,不然引發的麻煩還不少呢!


從 HTTP 升級 HTTPS 之後,同步要更新的程序,
我們在下面先整理了一個精簡版的工作檢查清單跟大家分享:

  • 強制用 .htaccess 檔案來把每一個 HTTP 來的流量,導向到 HTTPS 的版本(這個之前的段落已經做過了)。
     
  • 將全站所有外掛的如Javascript, CSS 等外部連結資源,也要全部更新為 HTTPS 的版本(不然會一直跳出錯誤)。
     
  • 網頁內文中,如果原本有寫過自家舊的 HTTP 連結網址,最好也要全部更新為 HTTPS 的版本。
    在這個部分,如果大家使用的資料庫是 MySQL的話,那麼可以參考我們之前有寫過的一篇:如何以 MySQL 內建功能來取代欄位中特定字串,在這篇文章中就有分享快速更新內文中所有連結的語法。

  • 如果有登錄使用『Google 網站管理員(Search Console)』的朋友,要將舊的網站移除,重新加入新的 HTTPS的版本。
     
  • 延續上一項的清單,在 Search Console 中原本提交的 Sitemap 檔案,也先移除,重新提交一份新版的Sitemap,不然舊的Sitemap裡面還是舊的 HTTP 版本的連結。
     
  • 觀察一週,看看系統的 Error Log 有沒有任何相關的錯誤(很容易有 500 內部錯誤或是 404 找不到網頁)。

有計畫要升級 HTTPS 的朋友們,希望這次的分享對大家有幫助 ^^
一起試試看吧!