RestAPIを使用してWordPressをヘッドレスCMSとして使うにあたり、投稿ページなどのURLは問題ないとしてメディアファイルのURLは元のままなのが気になったので、ファイルの保存先を変更することにしました。
後半にも書きますが、同じサーバー内であればWordPressがインストールされているドメインと別のドメインであっても保存先に利用できたので、WPサイトのドメイン隠しに有効だと思います。
画像アップロード先変更の作業の流れを確認
通常であれば https://ドメイン/wp-content/uploads/ が、メディアファイルの保存先に使用されていますが、これを https://image.ドメイン/ というサブドメインに変更するものとします。
ファイルのアップロード先を変更すると、過去にアップロードした画像も含めた全てのメディアファイルの参照先URLが変更されるので、
- 新しいアップロード先を作る(すでにある場合は不要)
- 既存のメディアファイルを新しいアップロード先に全てコピー
- メディアファイルの保存設定(保存場所)を変更
- 古いメディアファイルを削除
という流れになります。
メディアファイルのコピーではなく移動でも可能ですが、設定途中に画像が非表示になってしまうことを避けるために、より安全な方法をとることにします。
新しいアップロード先を作り既存ファイルをすべてコピー
今回はサブドメインを新しい保存先として新設します。利用サーバによって作業内容が異なりますので詳細は割愛します。
保存先を変更すると、すべてのメディアファイルの参照先が変更されます。
過去にアップロードしたファイルをそのままにしておくと画像が表示されなくなってしまいますので、すべて新保存先にコピーします。
/wp-admin/options.php にアクセスし設定変更
メディアファイルのアップロード先の設定を変更します。
テーマによっては、 管理画面 > 設定 > メディア に設定項目が表示されていますが、大体表示されていないと思うので、 ドメイン/wp-admin/options.php にアクセスします。
/options.phpにアクセスすると、テーマやプラグインが指定している設定項目がずらっと並んでいます。その内の「upload_path」、「upload_url_path」の2つを変更します。
upload_path には新しい保存先の相対URLを、upload_url_path には絶対URL(https:// から始まるURL)を指定します。
ルートパスを確認する
アップロード先のURLを指定する際にサーバー名が必要となりますのでルートパスを確認しておきます。(* すでに分かっている場合、次の手順は不要です。)
サーバー内であれば場所に指定は無いのですが、今回は「WordPressがインストールされているディレクトリ」に、「call-path.php」(下記のファイル)を設置します。
<?php
echo dirname(__FILE__);
?>
https://ドメイン/call-path.php にアクセスすると、/home/サーバー名/ドメイン名 のような形で表示されると思います。
upload_pathとupload_url_pathを変更する
試したレンタルサーバーはconoHa Wingでしたが、相対URLは、「 /home/[サーバー名]/public_html/[サブドメイン] 」、絶対URLは「 https://[サブドメイン] 」となりました。
参考にさせていただいたサイト(https://half-half.info/?p=1020)によると、エックスサーバーでも同様のようです。
なお、ConoHa WingでWAFを利用していると、/options.php の変更がサーバー攻撃と誤認されエラーとなる場合があります。
エラーが出た場合は、サイト管理の「セキュリティ」項目で、該当のエラーログを「除外」するか、一時的にWAF機能をオフにするなどして対応します。
表示を確認したら古いファイルを削除
/options.phpの変更を反映した時点で、メディアファイルの参照先はすべて新しい保存先に置き換わっています。
実際にサイトを確認し、表示されていなければ、
- upload_url_path、upload_pathの設定が誤っている。
- 新しい保存先にファイルが無い
のいずれかです。
同じサーバー内であれば、保存先は別ドメインでも可
メディアファイルの保存先は、同じサーバー内であれば、他のドメインであっても利用できます。(* 注:conoHa Wingでしか検証していないので、他のサーバーでも可能かどうかは分かりません)
仮に同じサーバー内に、aaa.com と、bbb.jpがあるとして、aaa.comのメディアファイルを、sub.bbb.jp に保存することも可能です。
この状態で aaa.com をヘッドレス化、RestAPIを利用してexample.comで表示させると、example.comに表示されるメディアファイルのsrc属性はsub.bbb.jpとなっていますので、aaa.comの安全性が高まります。
完全に元ドメインを秘匿できるわけではないですが、やらないよりはマシだろうぐらいの感覚で、他のWPサイトをヘッドレス化する場面でも活用していこうと思います。