クイックノート

ちょっとした発見・アイデアから知識の発掘を

【WordPress】管理画面を使わずにhttpsに移行する

WordPress の http から https への移行は、
通常、管理画面からプラグインを導入したり設定をいじって行います。

ところが、ホスティングサーバーが、
急にhttpsへの強制リダイレクトを設定するなどして、
WordPressの設定が間に合わず
管理画面に入れなくなったという状況が生じた場合、
管理画面を使わずにhttpsに移行せざるを得なくなります。

ここでは、そんな特定の状況で役立つ
管理画面不要のhttpsへの移行方法を紹介します。

前提

WordPressをホストしているサーバーはhttps対応済みであるとします。

サーバーのhttps対応方法は以下の過去の記事を参照して下さい。

clean-copy-of-onenote.hatenablog.com

もっとも、サーバー設定自体が弄れる場合は、
httpsのリダイレクトを切って、
管理画面からプラグイン等の利用ができるので、
今回のような問題にはならないのですが。。。

症状

ホスティングサーバー側で強制 https リダイレクトされると、
どのような不都合が生じるのでしょうか。

サーバーが https に対応した上でリダイレクトすれば、
当然、サーバーはhttpsのリクエストを受けて、
HTMLを返すので、ページ自体は表示されます。

ところが、ページのレイアウトが大きく崩れる可能性があります。

スタイルシートスクリプトの読み込みエラー

Webページは複数ファイルを参照して
ページの内容やレイアウトを決めています。
レイアウトに特に関わってくるのが、CSSJavascriptですが、
httpsに強制リダイレクトされると、
これらのファイルを読み込めなくなる可能性があります。

https では、セキュアな通信を保つために、
ページを構成するパーツをダウンロードする場合にも、
https での通信が求められます。

サイトへのアクセスをhttpsに強制リダイレクトすると、
cssjavascriptをhttpで読み込む設定のままでは、
下の図のように通信がブロックされてしまいます。

f:id:u874072e:20190807124347p:plain
css, js の読み込みエラー

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の管理画面での操作は便利ですが、
管理画面に頼らなくてもできることは沢山あることを
覚えておくと良いかもしれません。

プライバシーポリシー