網路不是一個很安全的環境,這點大家應該都非常清楚了。
在過去,一個加密網站(以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 的朋友們,希望這次的分享對大家有幫助 ^^
一起試試看吧!