先日、WordPressの設定変更がきっかけで、少し手こずるトラブルに遭遇しました。
パーマリンクを見やすくしたくて、「基本」から「投稿名」に変更したのですが、変更直後から記事の更新ができなくなりました。表示されたのは「更新に失敗しました。返答が正しいJSONレスポンスではありません。」というエラーです。試しにパーマリンクを「基本」に戻すと問題なく保存できるため、原因はこの設定変更にあるようでした。
まずは状況を整理しました。環境は自宅のUbuntu上で動かしているApache 2.4.58、PHPは8.3.6です。mod_rewriteも有効になっていることは確認済みでした。この時点では、正直どこに問題があるのか見当がつかない状態でした。
手がかりを探すため、ブラウザの開発者ツールで通信内容を確認しました。すると、記事保存時に呼び出されるWordPressのAPI(/wp-json/)がすべて404を返していることに気付きました。JSONエラーという表示でしたが、実際にはAPI自体に到達できていない状況でした。
mod_rewriteは有効なのにURLの書き換えが機能していないことから、.htaccessが効いていない可能性を疑いました。Apacheの設定ファイルを確認したところ、WordPressを設置しているディレクトリに「AllowOverride None」が設定されていました。
この設定では.htaccessが無効になるため、WordPressが自動生成するリライトルールが適用されません。結果として、/wp-json/のようなURLが正しく処理されず、404になっていたようです。
対応として、「AllowOverride None」を「AllowOverride All」に変更しました。その後Apacheを再起動し、WordPressのパーマリンク設定画面で「変更を保存」を実行してルールを再生成しました。
再度投稿を更新してみると、エラーは解消され、正常に保存できるようになりました。
振り返ると、原因はWordPressではなくサーバー側の基本的な設定でした。最初はプラグインやWordPress自体を疑ってしまいましたが、結果的にはかなり基礎的な部分に原因がありました。
解決までにおよそ2時間ほどかかりましたが、原因にたどり着いたときは少しほっとしました。同じようなエラーが出た場合は、ApacheのAllowOverride設定も確認してみるとよいかもしれません。