WordPressサイトを作成していた時、パーマリンクを変更すると、突然、投稿ページの保存ができなくなりました。
保存しようとすると、「更新に失敗しました。返答が正しいJSONレスポンスではありません」というエラーが出ました。
なぜ起きたのかは不明ですが、色々な方法を試して、結果的に解決できたので、その内容をご紹介します。
JSONレスポンスのエラー発生状況
サイト、サーバーなどの状況
当サイトではなく、サイト制作のサポートで以下のサイトを扱っていました。
- テーマ:DIVER
- サーバー:ConoHa WING
- 海外からアクセスしていました。
VPNは使わず、ConoHa WINGの海外アクセス制限の「ダッシュボード」をOFFにしていました。
JSONレスポンスのエラーが発生した状況
サイトの立ち上げ段階で、パーマリンクをデフォルトからカスタム構造に変更しました。
すると、投稿ページを更新しようとすると、「更新に失敗しました。返答が正しいJSONレスポンスではありません」とエラーメッセージが表示され、更新できなくなりました。
パーマリンクは、カスタム構造だけではなく、デフォルト以外は全てエラーになりました。
JSONファイルとはなんでしょうか。
分かりにくい仕組みなのですが、WordPressでデータのやり取り等に使われています。
JSONとは、JavaScript Object Notationの略で、ジェイソンと呼ばれます。
JSONはJavaScriptで定義されているオブジェクト表記法の1つで、テキスト形式で表記されるので、簡単にデータ交換ができます。
そのためJavaScriptに限らず、主要なプログラム言語から利用されています。
参考:アンドエンジニア
JSONレスポンスのエラー 原因と解決策
エラーが起きた原因は、①htaccessファイルの記載内不足と②RESET-APIの設定だったようです。
なぜ、そのようになったかは分かりませんでしたが、以下の2点を修正することで解決しました。
- .htaccessファイルに記載を追加
- RESET-APIをON⇒OFFに変更
.htaccessファイルに追記した内容
.htaccessファイルを編集する前は、編集前に必ずバックアップを取って保存してください。
サイト全体に影響する重要なファイルなので、問題が起きた場合はバックアップファイルで元に戻しましょう。
ConoHa WINGのファイルマネージャーを使って.htaccessファイルに追記しました。
以下が追記したコードです。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
元の.htaccessファイルの内容
元の.htaccessファイルの内容は以下の通りでした。
この下に先のコードを追記しました。
SetEnvIf Request_URI ".*" AllowForeignWpLogin
SetEnvIf Request_URI ".*" UnlimitedWpLogin
当サイトも含めて、これまで作成したサイトの場合、追記したコードは、自動的に入っていました。
今回、なぜ、コードが抜け落ちていたかは不明です。
これまで起きたことがなかったのですが、サーバーやテーマの相性もあるのでしょうか。
RESET-API の設定変更
.htaccessファイルの修正だけでは、改善されなかったので、更に色々試しました。
RESET-APIをON⇒OFFに変更すると、エラーが出なくなり、更新できました。
以下はConoHa WINGの管理画面の変更箇所です。
海外からのアクセスも原因の一つ
エラーが消え、ページを更新できるようになった後に、VPNを立ち上げて、RESET-APIを今度はOFF⇒ONに戻しましたが、問題は起きませんでした。
この点については、私が海外からアクセスしていたことが原因だったようです。
私がサポートしていたサイトの所有者は、日本にいるので、RESET-APIはONでも問題ないです。
ちなみに、当サイトはエックスサーバーを使っています。海外からアクセスしており、RESET-APIはOFFにしています。
エラー解消のため 他に試したこと
今回の問題が起きて、原因になると言われているものを色々試しました。
私の場合は、結果的に前述の2点以外、解決にはつながりませんでした。
- パーマリンクの設定で再保存する
- サーバーでWAF(Webアプリケーションファイアウォール)の設定を変更(ON→OFF)
- プラグイン無効化
- ブラウザキャッシュの無効化
まとめ
今回のトラブルは、海外からアクセスしていたこともあり、原因が2つあって、解決するのに苦労しました。
結果的に以下の2つの対応で解決しました。
- .htaccessファイルに記載を追加
- RESET-APIをON⇒OFFに変更(海外からアクセスしていたため)
更新ができないことは、致命的なので、焦ってしまいます。
同様のトラブルは結構あり、.htaccessファイルの記載内容が原因のケースも多いようです。
以下のCocoonフォーラムで、同様のJSON レスポンスエラーについて、様々な解決策が提示されていて、参考になりました。