【WordPress】WEBサイトをSSL対応する方法
SSL
WordPress
リダイレクト
こんにちは、岐阜・名古屋を拠点に全国各地からご依頼いただくWEBサイトを制作しているフリーランスエンジニアの寺井です。
既存のサイトを常時SSL化する際、.htaccessへの記述での注意点を解説したいと思います。
httpsへのリダイレクトの記述
SSL化をした際、.htaccessには以下の記述を行います。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
下層ページがhttpsへリダイレクトされない
WordPressサイトの場合、WordPressをインストールした際、必須で.htaccessが作成され、以下のような記述がされています。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
そのため特に気にしないと以下のようにリダイレクト設定を追記してしまうのではないでしょうか。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
しかし、この書き順だと、トップページはSSL化で統一されますが、下層ページはhttpのままでhttpsへリダイレクトしてくれません。
これはドメインのみでアクセスした場合以外は、WordPressのリダイレクトルール(# BEGIN WordPress
~ # END WordPress
)が適用されるため、[L]
フラグで .htaccess の実行が終了してしまうためです。
WordPressサイトの正しいSSL記述
WordPressサイトでの正しいSSLの記述は以下の通りです。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
たったこれだけ。先ほどの例と違うのは記述する順番が違うだけ。
先にhttpsへのリダイレクト設定の記述を設定し、その後、WordPressの標準の記述を設定します。
SSL化した際、トップページだけ確認して正しく動作していると思い込み、後日下層ページを確認してみるとSSL化されていない。なんてことにならないように、この辺り気を付けていきたいですね。