結論
- Gutenberg は、REST API ( /wp-json 以下と通信 ) 使う
- WAFなどで、この通信を制限していると、エラーが起こる
- 対策は、この制限を解除すること
経緯
WordPress 5.0 から導入される新しいブロックエディタを気に入って使っています。投稿する人のモチベーションが上がって、とても良いです。執筆者が喜んで、使ってくれています。
しかし、エラーに悩まされることも、度々。
最近も、急にエラーがではじめたのですが、原因はWAFにありました。WordFenceという有名なWAFプラグインを利用していたのですが、Leanringモードから自動的に「Portectionモード」に切り替わったタイミングでエラーが起こりました。
特にわかりづらかったのが、「過去の投稿を編集できるけど、新しい編集はエラー」となったため、最初は混乱しました。調べてみると、WordFence が特定の投稿へのREST APIアクセスをWhiltelist として学習していたためです。
※ 親ディテクトリで、WordFence プラグインを使っていて、「サブディレクトリのWordPress」の wp-jsonへのアクセスがブロックされてしまいました
解決方法は、WAFの設定を見直すことです。
WAF が動いていると考えられる場所を点検する
以下のような場所を点検して、適切に設定します。
- WordPressプラグインで、ブロックしていないか? (WordFence)
- レンタルサーバーの設定で、ブロックしていないか? (国外IPアドレスブロックなども)
- CloudFlare などの CDN でブロックしていないか? (基本はしません)
例えば、レンタルサーバーで「国外IPからのブロック」となっていて、CloudFlareを使っていると、時々問題が起こるそうです。CloudFlare経由でのアクセスが、国外IPとして見える時があり、その時にエラーが起こります。
CloudFlare の Page Rule で、 wp-admin や wp-json は、Bypass 指定すると良いかもしれません。
原因の調査方法
エラーが発生したら「要素の検証」などを使って、エラーを見ます。すると、403エラーや、401エラーが多発していました。それらのURLをみると、wp-json 以下だったので、「WAFかも」と思い、WAFをしてそうなところを総点検して解決しました。
現役プログラマでも、システムエンジニアでもないので、情報が曖昧かもしれませんが、 参考になれば、幸いです