WordPress REST API 404エラーの修正:「rest_no_route」を解決する方法

intermediate📝 WordPress2026-04-27| WordPress 4.7以降、PHP 7.4/8.x、Linux/Windows上のApacheまたはNginx。

Error Message

rest_no_route: No route was found matching the URL and request method
#wordpress#rest-api#パーマリンク#nginx#apache#デバッグ

TL;DR:60秒で解決する方法

このエラーの約90%は、WordPressの書き換えルールが同期されていないか、パーマリンクが「プレーン」のままになっていることが原因です。

  • WordPress管理画面にログインします。
  • 設定 > パーマリンク に移動します。
  • 投稿名(または「プレーン」以外の任意のオプション)を選択します。
  • 変更を保存 をクリックします。

この操作だけで書き換えルールがフラッシュされます。APIエンドポイントを再読み込みすると、通常はすぐに動作するようになります。

なぜこのエラーが発生するのか?

/wp-json/wp/v2/posts のようなリソースをリクエストして rest_no_route レスポンスが返ってくる場合、サーバーは動いているものの、WordPressがURLを特定の関数にマッピングできていない状態です。

{
    "code": "rest_no_route",
    "message": "No route was found matching the URL and request method",
    "data": {
        "status": 404
    }
}

このエラーは主に以下の3つの原因から発生します:

  • パーマリンクの無効化: REST APIは /wp-json/ スラッグに依存していますが、「プレーン」設定ではこのスラッグが存在しません。
  • Webサーバーのルーティング: NginxまたはApacheがリクエストを index.php に正しく渡していない。
  • HTTPメソッドの不一致: GET リクエストしか受け付けないエンドポイントに対して POST でデータを送信しようとしている。

修正1:サーバーレベルの設定

Apacheをご利用の場合

ルートディレクトリ(通常は /var/www/html/)に .htaccess ファイルが存在することを確認してください。このファイルにはWordPressの標準ルーティングブロックが含まれている必要があります。ファイルが存在しない、または書き込み権限がない場合、APIは機能しません。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

バーチャルホストの設定ファイルを確認してください。AllowOverrideNone に設定されている場合、Apacheは .htaccess を完全に無視します。AllowOverride All に変更してください。

Nginxをご利用の場合

Nginxは .htaccess を認識しません。物理ファイルに一致しないリクエストの処理方法を明示的に設定する必要があります。サイトの設定ファイル(多くの場合 /etc/nginx/sites-available/default)を開き、locationブロックを確認してください:

location / {
    try_files $uri $uri/ /index.php?$args;
}

nginx -t を実行して構文エラーがないか確認し、systemctl reload nginx でサービスを再起動してください。

修正2:カスタムAPIルートのデバッグ

デフォルトのエンドポイントは動作しているのに、カスタムエンドポイントが失敗する場合、register_rest_route の実装に問題がある可能性があります。よくあるミスは、登録処理を rest_api_init フックでラップし忘れることです。

add_action( 'rest_api_init', function () {
  register_rest_route( 'myplugin/v1', '/data', array(
    'methods' => 'GET',
    'callback' => 'my_awesome_func',
    'permission_callback' => '__return_true',
  ) );
} );

HTTPメソッドも確認してください。ルートを GET として定義しているのに、JavaScriptの fetch()POST を送信している場合、WordPressは404の rest_no_route を返します。URLが名前空間と完全に一致しているかも確認してください:yoursite.com/wp-json/myplugin/v1/data

動作確認とテスト

APIのベースURLが応答しているか確認します。ターミナルで以下のコマンドを実行してヘッダーを確認してください:

curl -I https://yourdomain.com/wp-json/

HTTP/1.1 200 OK が返ってくれば、APIは正常です。大量のJSONが表示される場合は、JSONフォーマッター を使って内容を確認してください。PHPの通知や警告がJSON構造を破壊し、フロントエンドアプリケーションが混乱している場合があります。

よくある落とし穴

  • セキュリティプラグイン: 「All In One WP Security」や「Hide My WP」などのツールは、未ログインユーザーに対してREST APIを無効にすることがよくあります。これらの「WP REST API」設定を確認してください。
  • CloudflareのWAF: 本番環境でのみ403や404が発生する場合、CloudflareのWAFがAPIコールを不審なアクセスとしてブロックしている可能性があります。
  • 末尾のスラッシュ: サーバーの設定によっては厳格な場合があります。/wp-json/my-endpoint/ が失敗する場合は、スラッシュなしの /wp-json/my-endpoint を試してください。
  • ModSecurity: 共有ホスティング環境では、ModSecurityが wp-json リクエストをブロックすることがあります。問題が解決しない場合は、ホスティングのコントロールパネルで「エラーログ」を確認してください。

Related Error Notes