【AWS】EC2+ELB+WordPressサイトのSSL化(.htaccess)
前提・やりたいこと
このサイトはWordPressで作成されているので、SSL化にあたっては「Really Simple SSL」という定番プラグインを使用しました。
しかし、サブディレクトリに全然関係ないHTMLファイルを置いてアクセスするとHTTPSにリダイレクトされない。「https://〜」とURL欄に入力すればHTTPSアクセスできるんですが、やっぱりHTTPでアクセスされた場合も自動でHTTPS通信になるようにリダイレクトして欲しい。
「.htaccess」でリダイレクトの設定をすればいけるはずなのでトライ。 ……が、半日くらい躓いてしまいました。愚か。延々続くリダイレクトループ。
解決までに確認したこと・やったことをメモします。 結論から言うと、「.htaccess」を元の状態に戻して、「Really Simple SSL」の設定を変更したらうまく行ったんですけど……。原因はプラグインのせいではなく、環境による「.htaccess」記述内容の違い、でした。
環境・状態
- Webサーバー
- Apache (EC2にインストール)
- SSL証明書
- AWS のACMで発行、動作確認済み
- ELB(ロードバランサー)にSSL証明書を適用
- WordPress
- 「Really Simple SSL」でSSL化済み
よくある原因
「.htaccess」への追記内容を確認
# HTTP->HTTPSリダイレクトの設定(Apache)
<IfModule mod_rewrite.c>
RewriteEngine On RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>
どのサイトを見てもこの記述だったので間違いないっぽい(と思っていた)。
ルートディレクトリに配置した「.htaccess」には既にWordPress用の定義があるので、それの上部に挿入すること。 しかし、このコードを挿入するとリダイレクトループに陥る。
ファイルの文字コードを確認
- UTF-8(BOMなし)
- 改行コード:LF
上記の設定を確認。解決しない、次。
ファイルのパーミッションを確認
- 604
確認。解決しない、次。
解決:SSL化プラグインの設定変更
- 「.htaccess」リダイレクト定義(エラー原因)を削除する。
- WordPressの「設定」→「SSL」→「セッティング」で以下をオンにする
- Enable 301 .htaccess redirect:ON
- 「.htaccess」に追記された内容を確認する


何やらHTTPSへのリダイレクトルールが追記されている。 うん?これまでググって自分が記載してきたのとちょっと違うな……RewriteCondのあたりが。
この状態で「https://mkdev.mtnk.work/subdir」とHTTPアクセスをすると……

↓

HTTPSにリダイレクトされました。 つまり、記述内容の問題らしい。
原因
どうやら「RewriteCond」の定義が原因っぽい。
# 自分で追記
RewriteCond %{HTTPS} off
# SSL化プラグインが追記
RewriteCond %{HTTP:X-Forwarded-Proto} !https
単に「HTTPSでない」というだけではだめらしいが、世の中のWordPress構築サイトの皆さんはこの設定でうまくいっているのに、何故?
「%{HTTP:X-Forwarded-Proto}」でググったところ以下のQ&Aを発見。AWS公式です。
ELB の Classic Load Balancer で HTTP トラフィックを HTTPS にリダイレクトする方法を教えてください。
以下のような書き換えルールを追加します。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/redirect-http-https-elb/
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
公式に答えがありました。「.htaccess」の設定を疑い、記述内容を疑い、プラグインを疑い、ようやくELB(ロードバランサー)にSSL証明書を適用している場合は書く内容が普通と違う、というところにたどり着いた……。お疲れ!
さらに、上の回答内容ですとELBを使っている場合は「httpd.conf」を編集するのがベストプラクティスだそうです。「.htaccess」ではなく。そっか……。また次回。

ディスカッション
コメント一覧
まだ、コメントがありません