WordPressの常時SSL化では、.htaccessの順序に注意!

今や常識ともいえる「ウェブサイトの常時SSL化」ですが、先日、既存のWordPressを常時SSL化する際にハマってしまいました。

下層ページがhttpsにリダイレクトされない!

既存のWordPressサイトを常時SSL化する際、私は下記のような手順で行っています。
SSL化プラグインを使うとプラグインが外せなくなるのと、WordPress以外に対して常時SSL化ができないので、多少面倒でも下記のようにしています。

  1. サーバーでSSLを有効にする
  2. Search Replace DB で、WordPress内の文字列を http → https に置換

    SearchRegexプラグインを使う記事を多く見かけますが、このプラグインではカスタムフィールド内の文字が置換されなかったりすることがあるのでお勧めしません。
  3. .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八王子など登壇多数

“WordPressの常時SSL化では、.htaccessの順序に注意!” への4件のフィードバック

  1. キボンヌのアバター
    キボンヌ

    バッチリ問題解決できました。 ありがとうございました。

    1. 川井 昌彦のアバター
      川井 昌彦

      コメントありがとうございます。
      お役に立てて良かったです。

  2. けいたろうのアバター
    けいたろう

    Xサーバーの指示には.htaccess内に「記述すればいい」としかなく、後ろの位置に記述してもおっしゃる通りリダイレクトされませんでした。
    おっしゃる通り前の位置に記述したらすぐ検索結果にも反映されました。
    大変ありがとうございました。

    1. 川井 昌彦のアバター
      川井 昌彦

      コメントありがとうございます。
      お役に立てて良かったです。
      エックスサーバーのサポートに連絡されると、今後改善されるかもしれません。
      他のユーザーの方のためにもなりますので、お時間ある時に連絡してみてくださいね。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Vektor Passport(ライセンス期間1年)
VK Filter Search Pro
Vektor WordPress Solutions
PAGE TOP