WordPressのドメインを、別のドメインに変えたあと、サイトもログイン画面も、真っ白になりました。ブラウザには「このページは動作していません。HTTP ERROR 500」と出ます。原因は、Wordfenceが .htaccess に書いた「PHPを動かす前に読むファイル」の場所が、古いドメインのフォルダのままだったことでした。見つけ方と直し方を、実際に確かめたことだけで、まとめます。
どんな症状だったか
- サイトのトップも、
wp-login.phpも、wp-adminも、中身のない(0バイトの)500エラー - 管理画面(hPanel)からは、サイトの一覧が、空白のプレビューで出る
- 画像、JS、
readme.htmlのような、ただのファイルは、普通に表示される
試して、効かなかったこと
- PHPの版を下げる: 8.5から8.2に変えました(応答の
X-Powered-Byでも、8.2.35に変わったことを確認)。同じ500のままでした - プラグインを全部止める:
wp-content/pluginsのフォルダ名を替えました。同じ500のままでした - キャッシュ用の追加ファイル(
advanced-cache.php、object-cache.php)は、そもそも、ありませんでした
WordPressの手前で止まっていると分かった方法
ターミナルの curl で、いくつかのファイルを、順に開きました。
/wp-login.php、/wp-json/、/xmlrpc.php: 500/wp-includes/rss.php(古い互換用の小さなファイル): 500/readme.html、/license.txt、画像、JS: 200
WordPressと関係の薄い、小さなPHPファイルまで止まっていたので、問題は、WordPressの中ではなく、PHPが動き始める前の設定にあると、考えました。
原因だった場所
サイトのフォルダの .htaccess を開くと、一番下に、Wordfenceの囲いがありました。
# Wordfence WAF
<IfModule LiteSpeed>
php_value auto_prepend_file '/home/uXXXXXXXXX/domains/<旧ドメイン>/public_html/wordfence-waf.php'
</IfModule>
<IfModule lsapi_module>
php_value auto_prepend_file '/home/uXXXXXXXXX/domains/<旧ドメイン>/public_html/wordfence-waf.php'
</IfModule>
# END Wordfence WAFauto_prepend_file は、「どのPHPファイルを動かす前にも、必ず、このファイルを先に読め」という指定です。指している場所が、変更前のドメインのフォルダのままでした。ドメインを変えると、サイトのフォルダ名が、新しいドメインの名前になるため、そのファイルが見つからず、すべてのPHPが止まったと考えています。静的なファイルだけが見えた理由も、これで説明がつきます。
(uXXXXXXXXX は、ホスティングのアカウント名を、伏せたものです。)
直し方
- File Managerで「隠しファイルを表示」をオンにし、サイトのフォルダ(
wp-config.phpがあるフォルダ)の.htaccessを、コピーしておく(.htaccess.bak) - 新しいフォルダに、
wordfence-waf.phpが、実際にあることを確かめる - 上の2行の、旧ドメインの部分を、新しいドメインに直して、保存する
- プライベートウィンドウで、サイトを開く
これで、500は消えて、トップとログイン画面が、200で開きました。フォルダ名を、書き間違えると、また止まります。自信がなければ、このWordfenceの囲いを、まるごと消す方法もあります(あとで、Wordfenceに書き直させます)。
.user.ini にも、同じ指定が入っていることがあります。このサイトには、.user.ini がありませんでした。あれば、同じ直しが要ります。なお、.user.ini は、PHPが約5分間覚えているため、直したあと、少し待つ必要があります。.htaccess の変更は、すぐ効きます。
直ったあとに確認したこと
- トップが200で開き、タイトルが出る。
/wp-admin/は、ログイン画面へ飛ぶ - WordPressの「サイトアドレス」と「WordPressアドレス」が、新しいドメインになっている(
?rest_route=/で確認)。ページの中に、旧ドメインへのリンクは、見つからなかった
分からなかったこと(限界)
- ドメインを変えたときに、ホスティング側が、フォルダ名を変えた、と考えていますが、その仕組みを、公式の説明で確認してはいません。古いパスのファイルが無かったことと、新しいパスに直したら、動いたことから、そう考えました
- Wordfence側の「ファイアウォールの最適化」を、もう一度やると、正しい書き方に、直るはずですが、この記事を書いた時点では、まだ、確認していません
- 1つのサイト(Hostinger、LiteSpeed)での出来事です。ほかの環境でも、同じ原因とは、限りません
確認するときのポイント
- PHPのファイルだけが、空の500になっているか(静的なファイルは、200か)
.htaccessと.user.iniに、auto_prepend_fileがあるか。あれば、指している場所は、実在するか- 500の応答に、
Cache-Control: public, max-age=604800のような指定が付くことがあるため、直ったあとの確認は、プライベートウィンドウで行う





