ConoHa WINGでREST APIが403に|原因と直し方

※本記事にはプロモーション(広告)が含まれています。

外部のプログラムからWordPressに記事を投稿しようとしたら、「403 Forbidden」で弾かれた。ネットで調べてUser-Agentを変えてみたけれど、何も変わらない。ConoHa WINGでWordPressを使っていて、こんな状態で止まっている方に向けた記事です。

この記事では、僕が実際にぶつかった「403 → 直したら今度は404 → 投稿成功(201)」の流れを、起きた順に書きます。原因はConoHa WINGの「海外アクセス制限」で、REST-APIの項目だけをOFFにしたら403は消えました。そのあと出た404は、WordPressのパーマリンク設定を保存し直したら直りました。

僕は移住前、都内でSEとして働いていて、今はこのブログの投稿をPythonで自動化しています。その作業中に実際につまずいた記録です。同じところで止まっている方が、どこを確認すればよいか分かるように書きました。

結論:403の原因は「海外アクセス制限」、404はパーマリンクの再保存で直った

先に結論をまとめます。

  • 403の原因:ConoHa WINGのWordPressセキュリティにある「海外アクセス制限」。Google Colabのような海外のサーバーから届くREST APIへのアクセスが、WordPressに届く前に弾かれていました
  • 403の直し方:コントロールパネルの海外アクセス制限で、「REST-API」の項目だけをOFFにする
  • その後の404の直し方:WordPressの「設定」→「パーマリンク設定」を開いて、何も変えずに「変更を保存」を押す

僕の場合:ColabのPythonから投稿したら403が返ってきた

やりたかったのは、Google ColabでPythonを動かして、WordPressのREST API(/wp-json/wp/v2/posts)に記事を投稿することです。ところが、返ってきたのは「403 Forbidden」でした。

レスポンスの中身を見ると、WordPressが返すJSON形式のエラーではなく、Apacheのエラーページ(HTML)でした。スクリプトの書き方が悪いのか、サーバー側の問題なのかも分からず、しばらくモヤモヤしていました。

User-Agentを変えても直らなかった

403で検索すると、「User-Agentをブラウザと同じものにすると通る」という情報がよく出てきます。僕もPythonのリクエストヘッダーのUser-Agentをブラウザ風に書き換えてみましたが、結果は同じ403でした。

原因はColabが「海外のサーバー」だったこと

最終的に分かった原因は、ConoHa WINGの「海外アクセス制限」でした。Colabのプログラムは自分のパソコンではなく、Google側の海外のサーバーで動いています。そのため、サーバーから見ると「海外からREST APIにアクセスしてきた」と判断され、弾かれていたわけです。

元SEとしての切り分け方:403が「どこで」返っているかを見る

今回の件から言えるのは、「エラーの番号」だけでなく「誰がそのエラーを返しているか」を見ると原因を絞りやすい、ということです。

  • WordPressが返すエラーは、{"code": "rest_cannot_create", ...} のようなJSON形式になります。これならリクエストはWordPressまで届いていて、ユーザー名や権限など、WordPress側の問題を疑います
  • Apacheなどのエラーページ(HTML)が返ってくる場合は、WordPressに届く前、サーバーの手前で止められている可能性が高いです。この場合、プログラムやWordPressの設定をいくら直しても変わりません

僕の403はApacheのエラーページだったので、「WordPressより手前の、サーバー側の制限」を疑うのが近道でした。User-Agentを変えても直らなかったのも、制限の理由が「何を名乗っているか」ではなく「どこから来たか」だったからだと考えられます。

自分のパソコン(国内)からは通るのに、Colabやクラウド上の実行環境からだけ弾かれる、という場合は、同じ海外アクセス制限を疑ってみてください。

手順1:ConoHa WINGで「REST-API」の海外アクセス制限だけOFFにする

ConoHa WINGの公式サポートによると、海外アクセス制限は次の場所にあります(2026年11月時点)。

  1. ConoHaのコントロールパネルで「WING」を開く
  2. 左メニューの「サイト管理」→「サイトセキュリティ」を開く
  3. 上のタブから「WordPressセキュリティ」を選ぶ
  4. 「海外アクセス制限」の中にある「REST-API」を「OFF」にする

公式サポートの説明では、海外アクセス制限には「ダッシュボード」「XML-RPC-API」「REST-API」「wlwmanifest.xml」「Abilities API」の項目があり、初期設定では全項目がONです。項目ごとにON/OFFを切り替えられるので、僕はREST-APIだけをOFFにしました。これで403は出なくなりました。

REST-APIをOFFにするときの注意

この設定は、海外からREST APIへのアクセスを許すことになるので、セキュリティを少し緩めることになります。次の点は意識しておくと安心です。

  • OFFにするのは必要な項目だけにする。外部から投稿したいだけなら、ダッシュボードやXML-RPCまで解除する必要はありません
  • 公式サポートによると、この画面の設定はドメイン内のすべてのWordPressに適用されます。同じドメインで複数のWordPressを動かしている場合は、すべてに影響します
  • 自動投稿をやめたら、ONに戻すことも検討する

手順2:次に出た404は、パーマリンク設定を保存し直したら直った

403は消えましたが、今度は「404」が返ってきました。

ここで効いたのは、WordPressの管理画面で「設定」→「パーマリンク設定」を開き、何も変えずに「変更を保存」を押すことです。これだけで、次の投稿では「201」が返ってきて、記事が作成されました。201は「リクエストが成功して、新しいデータが作られた」ことを表すステータスコードです。

なぜ404になっていたのか、はっきりした原因までは突き止めていません。/wp-json/ というURLはパーマリンク(URLの書き換え)の仕組みを使っているので、保存し直したことでその設定が整ったのかもしれませんが、確かめてはいません。「僕の場合はこれで直った」という記録として読んでください。

「WordPress REST API 404」の切り分けに使える方法

WordPressの公式ドキュメントによると(2026年11月時点)、パーマリンクの書き換えが使えない環境では、REST APIのURLを /wp-json/ の代わりに ?rest_route= というパラメーターで指定できます。

  • 通常:https://example.com/wp-json/wp/v2/posts
  • 代わりの書き方:https://example.com/?rest_route=/wp/v2/posts

/wp-json/ だと404なのに ?rest_route= だと通るなら、REST API自体は動いていて、URLの書き換え側に問題がある、と切り分けられます。そのうえでパーマリンク設定を保存し直してみてください。

それでもダメなとき

ここまでやっても投稿できない場合は、レスポンスの中身で次のように見分けます。

  • 403で「SiteGuard」の文字が出る:ConoHa WINGのWAF(SiteGuard Lite)に止められています。僕は画像のアップロードでこちらにも引っかかりました
  • 401で「rest_cannot_create」が出る:WordPressのユーザー名やアプリケーションパスワードの問題です。僕の場合は、ユーザー名がひな形のままでした
  • それ以外:セキュリティ系プラグインがREST APIを止めていないかも確認してみてください

ここまで見てきたように、ConoHa WINGには海外アクセス制限とWAF(SiteGuard)という2つのセキュリティ機能が用意されています。僕は自動投稿でどちらにも引っかかりましたが、どちらも管理画面から項目ごとに解除したり、除外したりできました。これからWordPressを始めるためにサーバーを探している方は、公式サイトで機能や料金を確認してみてください。

ConoHa WINGお申し込みはこちらから

まとめ

ConoHa WINGでREST APIが403になったときに、僕がやったことをまとめます。

  • 403の中身がApacheのエラーページなら、WordPressより手前で止められている
  • Colabなど海外のサーバーで動く環境から投稿しているなら、「海外アクセス制限」を疑う
  • 「サイト管理」→「サイトセキュリティ」→「WordPressセキュリティ」の海外アクセス制限で、REST-APIだけOFFにする
  • 次に404が出たら、パーマリンク設定で「変更を保存」を押し直す
  • 解除するのは必要な項目だけにして、使わなくなったらONに戻すことも考える

User-Agentを変えても直らないときは、「どこから来たか」で弾かれている可能性があります。同じところで止まっている方の参考になればうれしいです。