状態・症状

  • curl やクライアントから POST ${WP_BASE_URL}/wp-json/wp/v2/posts など WordPress REST API を呼ぶと HTTP 404 になる。
  • ブラウザで https://(サイト)/wp-json/ を開いても 404 で、JSON のルート一覧が返らない。

原因

WordPress の 固定リンク(パーマリンク)が「基本」(?p=123 形式) のままだと、サーバー環境によっては リライトルールが効かず/wp-json/ へのリクエストが WordPress に届かない。結果として REST API のパスが 404 になることがある。

※ 404 の原因はこれだけではない(サイト URL の誤り、サブディレクトリ設置時のベース URL 違い、WAF・セキュリティプラグインなど)が、今回の事象は固定リンク設定が主因だった。

解決策

  1. WordPress 管理画面で 設定 → 固定リンク を開く。
  2. 「基本」以外(例: 投稿名)を選ぶ。
  3. 変更を保存 する。
  4. ブラウザで /wp-json/ が JSON を返すことを確認してから、再度 curl などで API を呼ぶ。

補足・確認コマンド

ルートが生きているかの簡易確認(認証不要の例):

curl -sS -o /dev/null -w "HTTP:%{http_code}\n" "${WP_BASE_URL}/wp-json/"

200 付近でレスポンスが返れば、REST のエンドポイントに到達できている可能性が高い。

ABOUT ME
ytakeuchi
都内在住のフロントエンドエンジニア。2016年からフリーランスとして活動中。座右の銘は「昨日よりも楽に」。好きな言葉は「効率化」。こんな性格なのでプライベートではGoogle Apps Scriptばかり触っています。