如何將wordpress從http改成https


目的

  1. 會讓網站的Google Search Ranking提高。
  2. 看到自己的網址前面出現綠色的鎖頭,感覺不錯。

步驟一 購買SSL憑證

我是在CheapSSL上購買,Comodo單網域的SSL憑證三年只要$15,夠便宜。在Chrome的網址列上也不容易直接看到提供SSL的CA是誰,所以買便宜的就好。首先先做CSR,然後會拿到一個private key(要存好,之後要放到server上)。付錢買SSL以後,接著要證明你要購買的SSL網域是你所有。我的網域是在Godaddy買的,Godaddy上面可以很容易設定DNS,所以我是使用CNAME的方法驗證。Comodo會給你兩組hash,你就照他的填到你的網域的CNAME設定裏:

Comodo動作有點慢,等了一天多還沒有驗證好,我還去開了一個ticket催他,他才幫我驗證好。然後他會寄一個zip檔,裡面有4個crt。一個是你網站的crt (www_yoursite_com.crt),另外3個你要用以下指令做成ChainFile:

$cat COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt AddTrustExternalCARoot.crt > bundle.crt

步驟二 server設定(以Apache為例)

首先要enable ssl module:

$sudo a2enmod ssl

重開一下apache:

$sudo service apache2 restart

然後在你的website的apache conf檔案的VirtualHost指定SSL的檔案(紅字是重點):

<VirtualHost *:443>
        SSLEngine On
        SSLCertificateFile /etc/apache2/ssl/www_yoursite_com.crt <- 網站crt
        SSLCertificateKeyFile /etc/apache2/ssl/yoursite.private.key <- 送出CSR之後拿到的private key
        SSLCertificateChainFile /etc/apache2/ssl/bundle.crt <- bundle crt
        DocumentRoot /path/to/your/site
        ServerName www.yoursite.com
        <Directory "/path/to/your/site">
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                Allow from all          
                Require all granted
        </Directory>
</VirtualHost>

記得要在你放wordpress的機器上開443 Inbound(昨天就犯了這個低級錯誤卡了很久):

 

修改你的網站的.htaccess(通常放在網站檔案的根目錄):

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

這時你在Browser的網址列打www.yoursite.com應該會自動導到https://www.yoursite.com,也會看到精美的綠色鎖頭了。

步驟三 wordpress設定

你要先把wp-admin控制台強制使用https,要在wp-config.php加上這一行:

define('FORCE_SSL_ADMIN', true);

到控制台 -> 設定 -> 一般設定裡面,把原本設定的http改成https:

本以為這樣就大功告成,可是但當你點單篇文章時,可能會發現裡面圖load不出來,或是他仍然是連到http。那是因爲原本你在post那篇文章的時候,圖的link是給http。所以如果你的網站把http disable了,圖就出不來;如果你的網站仍然有保留http,就會發現這篇文章的link又被強制導回http,因為https裡面不能容許有http的內容。這裡有比較快的方法可以一次把所有文章包含http://www.yoursite.com的link全都換成https://www.yoursite.com。我個人是用phpmyadmin,記得先備份你的database,否則搞爛就完了。再來到你的wordpress的db,打sql:

UPDATE wp_options SET option_value = replace(option_value, 'http://www.yoursite.com', 'https://www.yoursite.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://www.yoursite.com', 'https://www.yoursite.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.yoursite.com','https://www.yoursite.com');

以上大意是把跟setting相關的http改成https、posts裡面有http改成https、post metadata裡面有http改成https。

經過以上這些步驟,熟練的話30分鐘內,應該就搞定了。

Leave a comment

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步瞭解 Akismet 如何處理網站訪客的留言資料