今や常識ともいえる「ウェブサイトの常時SSL化」ですが、先日、既存のWordPressを常時SSL化する際にハマってしまいました。
下層ページがhttpsにリダイレクトされない!
既存のWordPressサイトを常時SSL化する際、私は下記のような手順で行っています。
SSL化プラグインを使うとプラグインが外せなくなるのと、WordPress以外に対して常時SSL化ができないので、多少面倒でも下記のようにしています。
- サーバーでSSLを有効にする
- Search Replace DB で、WordPress内の文字列を http → https に置換
SearchRegexプラグインを使う記事を多く見かけますが、このプラグインではカスタムフィールド内の文字が置換されなかったりすることがあるのでお勧めしません。 - .htaccess に、httpでのアクセスをhttpsにリダイレクトする設定を追記する
今回のサイトは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
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
ところがこの書き方では、トップページ以外に http でアクセスすると、https にリダイレクトしてくれません。
(正確には、トップページでも index.php をつけるとリダイレクトしません)
これはなぜかというと、ドメインのみでアクセスした場合以外は、WordPressのリダイレクトルール(# BEGIN WordPress
~ # END WordPress
)が適用されて、[L]
フラグで .htaccess の実行が終了してしまうからです。
リダイレクトルールは書く順序に注意!
正しくはこのように、httpsへのリダイレクトルールを、WordPressのリダイレクトルールの前に書きます。
<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
httpでアクセスすると、最初のアクセスで https へのリダイレクトルールが適用されて .htaccess の実行が終了しますが、http以降のURLは変更されていないのでリダイレクト後に再度同じディレクトリにアクセスされます。
すると今度は httpsでアクセスされているので https へのリダイレクトルールは適用されず、WordPressのリダイレクトルールが適用されます。
常時SSL化の際の .htaccess の書き方は多くのブログ記事で見かけるのですが、リダイレクトルールを書く位置についてきちんと説明した記事はほとんど見かけませんでした。
いつもやっていることだからと適当に作業してしまうと、こういった間違いに気づかずにハマってしまいますね。
今後は気を付けたいと思います。
この記事を書いた人
-
FAシステムメーカー、国内最大手印刷会社製版部、印刷・ウェブ制作会社を経て、家庭の事情で実家に帰省して独立
現在はフリーランスと制作会社シニアディレクターのマルチワーク
ウェブ制作のほぼ全般を見渡せるディレクター業務が主だが、デザイン・コーディングも好き
1997年ブログ開設
WordPressコミュニティには2011年から参加
WordCamp Kansai 2016 セッションスピーカー
WordCamp Tokyo 2023 パネルディスカッションパネラー
WordBench京都、WordBench神戸、WordPress Meetup八王子など登壇多数
最新の投稿
ご質問・ご相談などありましたら
お気軽にお問い合わせください
資料請求・お問い合わせにはメールアドレスが必要です
コメントを残す