WordPress の http から https への移行は、
通常、管理画面からプラグインを導入したり設定をいじって行います。
ところが、ホスティングサーバーが、
急にhttpsへの強制リダイレクトを設定するなどして、
WordPressの設定が間に合わず
管理画面に入れなくなったという状況が生じた場合、
管理画面を使わずにhttpsに移行せざるを得なくなります。
ここでは、そんな特定の状況で役立つ
管理画面不要のhttpsへの移行方法を紹介します。
前提
WordPressをホストしているサーバーはhttps対応済みであるとします。
サーバーのhttps対応方法は以下の過去の記事を参照して下さい。
clean-copy-of-onenote.hatenablog.com
もっとも、サーバー設定自体が弄れる場合は、
httpsのリダイレクトを切って、
管理画面からプラグイン等の利用ができるので、
今回のような問題にはならないのですが。。。
症状
ホスティングサーバー側で強制 https リダイレクトされると、
どのような不都合が生じるのでしょうか。
サーバーが https に対応した上でリダイレクトすれば、
当然、サーバーはhttpsのリクエストを受けて、
HTMLを返すので、ページ自体は表示されます。
ところが、ページのレイアウトが大きく崩れる可能性があります。
スタイルシート、スクリプトの読み込みエラー
Webページは複数ファイルを参照して
ページの内容やレイアウトを決めています。
レイアウトに特に関わってくるのが、CSSやJavascriptですが、
httpsに強制リダイレクトされると、
これらのファイルを読み込めなくなる可能性があります。
https では、セキュアな通信を保つために、
ページを構成するパーツをダウンロードする場合にも、
https での通信が求められます。
サイトへのアクセスをhttpsに強制リダイレクトすると、
cssやjavascriptをhttpで読み込む設定のままでは、
下の図のように通信がブロックされてしまいます。
css,jsが読み込めないとなると、
レイアウトの指定ができなくなってしまい、
Webページの表示が大きく崩れてしまいます。
解決方法
上記の原因を見ると、
cssとjsのリンクを https とすれば良いことが分かります。
wordpressでは、get_stylesheet_uri()などの関数を利用して、
cssのリンクを生成していますが、
wordpress的にhttpsが有効になっていなければ、
この関数が http のリンクを生成してしまいます。
そこで、「wp-config.php」中で次のように変数設定を追記し、
https を有効にします。
$_SERVER['HTTPS'] = 'on'; $_ENV['HTTPS'] = 'on';
これで、css,jsへのリンクがhttpsで生成されるようになり、
上記のようなcss,jsがhttpsでないからブロックされるというエラーは解決です。
まとめ
ブラウザでもhttp通信は保護されていない通信であることを
明示的に表示するなど、https化への流れが加速しています。
このような状況の中では、
今まで利用していたホスティングサーバーが
突然httpsにリダイレクトするようなことも珍しくなくなるかもしれません。
WordPressの管理画面での操作は便利ですが、
管理画面に頼らなくてもできることは沢山あることを
覚えておくと良いかもしれません。