【WordPress】【解決法】更新に失敗しました。返答が正しいJSONレスポンスではありません。

Blog運営
Blog運営
スポンサーリンク

WordPressの環境に寄りますが、記事を更新しようとすると「更新に失敗しました。返答が正しいJSONレスポンスではありません。」とエラー表示がされて更新や公開や下書きができないときがあります。
いままで管理しているBlogでは出たことがなかったのですが、新しくBlogを立ち上げた際にこのエラーが出るようになったので解決策をまとめました。
いままで先達樣が色々苦労されて公開していただいているおかげで、なんとかなりました。ただ、わかりにくいところもありましたので簡単にまとめてみました。

WordPress環境

さくらのVPSサーバ(1G)
wordpress 5.6
CentOS7
apache 2.4.6
PHP 7.4.13(cli)
MariaDB mysql Ver 15.1 Distrib 10.5.8-MariaDB

インストールする環境としては上記環境になります。
随時環境に応じて読み替えてください。

更新に失敗しました。になった原因操作

まず、「更新に失敗しました。返答が正しいJSONレスポンスではありません。」のエラーが表示されだしたのは、どのような操作をしたときかを確認しました。

【原因操作】パーマメントを設定し直した時

基本に設定したときには公開出来ますが、それ以外の設定したときは軒並みエラーが表示されて公開出来ませんでした。また、公開出来ないので基本にもどしたら公開出来ましたので、原因操作は間違いなく「パーマリンク設定」です。
では、別に基本でも良いのでは?となりますが、将来的にBlogが本格稼働してからパーマリンク設定を変更すると、Googleからのリンク切れなどが発生しますので(リダイレクトで対応は可能です)できればパーマリンクの設定は最初の段階で行う必要があると判断したので原因を調べて解決するようにしました。

エラーの表示と状況

記事を書いたあと、公開や下書きを保存など操作をすると、「更新に失敗しました。返答が正しいJSONレスポンスではありません。」という表示がでる。なぜか左上の「W」マークもでない状態であった。肝心の記事は自体は、本体はクリアされ、題名が「自動下書き」とリネームされて下書きに保存されていた。

原因解決に対する考査

いろいろ原因を探っていくなかで、数々の解決策がありました。その数々の方法を記載していきます。ちなみに今回エラーがでたBlogは、2番目にご紹介するhttpd.iniを編集する方法で解決しました。しかし、どれも微妙に関連がありますのでどれか1つでは解決出来ずに複数箇所の対応が必要かもしれません。では、作業を行っていくのですが、念のため、再度パーマリンクの設定を再設定してみてください。なぜなら、1回設定しただけでは、エラーがでましたが、何度(2~3回ぐらい)か設定したら問題無くなったという情報もありましたので、念の為に設定してみてください。

 

mod_rewiteをインストールしてみる。

CentOS7ではmod_rewiteがapacheを設置する段階で有効になっていますので、有効になっているかの確認の意味合いが強いです。

httpd -M

で、出てくる有効(shared)なmoduleの中に「mod_rewite」があるか確認してください。

無い場合は、

vim /etc/httpd/conf.modules.d/00-base.conf

で、「mod_rewite」の頭に「#」がついているので消して有効にしてください。
その後、httpdを再起動して、確実に有効になっているか確認してください。

   

httpd.confを編集する

rewiteが有効になり、「.htaccess」の中身が変更可能になりました。しかし、Apacheの設定で許可されてなければ変更は出来ません。よって、設定ファイルを編集して変更の許可を出します。

vim /etc/httpd/conf/httpd.conf

ファイルの中で、/var/www/html/のところで、「AllowOverride」の後ろが「none」になっていれば「All」に書き換えてください。

<Directory /var/www/html>
. . .
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
. . .
 AllowOverride All ← ここを「none」だったら「All」へ
</Directory>

これで、apacheで書き換えが可能になります。

httpdを再起動して、まだ、「更新に失敗しました。返答が正しいJSONレスポンスではありません。」がでるか確認してください。私が対応したBlogではこの段階で解決に至りました。

隠しファイル「 .htaccess」を編集する

エラーが解消されていない状況で、ファイル「.htaccess」の中身を確認してください。

vim /var/www/html/.htaccess

このように、<IfModule mod_rewite.c> ~ </ifModule> の項目があれば問題ありませんが、そっくりそのまま消えている場合があります。その時は、とりあえず基本設定を記入して上書き保存してみてください。保存後httpdを再起動して、まだ、「更新に失敗しました。返答が正しいJSONレスポンスではありません。」がでるか確認してください。ここまで設定してきて、まだ更新に失敗する場合はWordPressやApacheが正常に動作しているのであれば、wordpressやApacheの設定の問題では無いと思われます。

 

エディターをブロックエディターからクラシックエディターに変更する。

エラーが出る原因がブロックエディターからの投稿が原因の場合も考えられます、これを解決するのは古いWordPressのエディタに変更することです。
 Classic Editorというのがプラグインで追加できますので、新規追加して此方で編集する方法です。ですが、期間限定の提供であるということと使い勝手が良いブロックエディタが仕えないのは非常に痛手になります。試しに、Classic Editorを入れる前にブロックエディターをコードエディタに切り替えて公開してみてエラーが出るか確認してください。もしこれでエラーが出ないようならブロックエディターが原因と考えられるのでClassic Editorに切り替えてWordPressが対応してくるまで待つようにしましょう。

 

REST APIに関連してWAFの設定

詳細を説明すると長くなるので簡単に説明しますと、WordPressが独自に持っているfirewallが働いて更新記事を拒絶している場合があります。パーマリンクの変更とどのように係わっているかは不明ですが、「JSONレスポンス」というところからWordPressの拒絶が考えられます。これを回避するために、記入者のグローバルIPアドレスを指定して、WordPressに許可してもらうと言う方法があります。

ファイル「.htaccess」の中身を確認して、次の内容を追加で記載してください。

#ブロックエディタエラー対策 start--------
<IfModule mod_siteguard.c>  
SiteGuard_User_ExcludeSig ip(xxx.xxx.xxx.xxx)
</IfModule>
#ブロックエディタエラー対策 end--------

xxx.xxx.xxx.xxxはご自身のグローバルIPアドレスを調べて記入ください。

もし、固定IPアドレスでプロバイダーと契約されていない場合は、アドレスが変動しますので記事を編集する際にはご注意ください。

ただ、このWAFについては、WordPressが複数人が投稿できるという概念に反することですので、バージョンアップなどで対応されると思われます。
WAF対策以外の対応を行い、それでもエラーが出て解決しない場合に試してみてください。

 

まとめ

如何でしたでしょうか。
いままでBlogを多く設置してきましたが、今回初めてこのエラーが出てびっくりしました。ですが、パーマリンク設定を基本から変更することがなかったのでこのエラーがでる状況にならなかっただけかもしれません。
いままで設置したWordPressのサイトでパーマリンク設定を変更してみましたが、今回エラー出たWordPress以外は無事に変更できました。
もし、「更新に失敗しました。返答が正しいJSONレスポンスではありません。」というエラーがでたら、記載した方法で対応してみてはいかがでしょうか?

この記事が、皆様のWordPress環境の改善に役立てば幸いです。

 

スポンサーリンク
chocolat-au-lait