NeuBlack Friday – 50 % Rabatt auf die erste Zahlung
WordPress-Fehlerbehebung

Die REST API hat einen Fehler festgestellt

Etwas beantwortete die Anfrage, die nicht WordPress war, oder beantwortete sie mit HTML. Der Editor hört auf zu arbeiten, weil es für alles von der API abhängt.

The REST API encountered an error: The REST API request failed due to an error.

Kurzantwort

Fordern Sie direkt eine REST-Route an und schauen Sie sich an, was zurückkommt. JSON bedeutet, dass die API lebt und das Problem die Authentifizierung ist; eine HTML-Fehlerseite bedeutet, dass etwas vor WordPress die Route abgefangen hat, bevor PHP geantwortet hat.

Diagnose

Die wahrscheinlichsten Ursachen zuerst.

Gehen Sie die Liste der Reihe nach durch. Prüfen Sie jede Ursache, bevor Sie etwas ändern, da die Lösungen unterschiedlich sind und eine Vermutung mehr Zeit kostet als ein Befehl.

UrsacheSo prüfen Sie esLösung
Ein Sicherheits-Plugin oder WAF blockiert die RouteDie Anforderung gibt HTML oder eine 403 von etwas zurück, das nicht WordPress ist, und der Block wird vom Plugin oder der Firewall und nicht von WordPress protokolliert.Regeln, die geschrieben wurden, um die Benutzeraufzählung zu stoppen, blockieren häufig den gesamten Namensraum und nicht den einen Endpunkt, auf den sie abzielen.
Permalinks sind kaputt, so dass die Route nie aufgelöst wirdDie hübsche Route 404s, während das Formular mit der Abfragefolge richtig antwortet. Dieser Unterschied isoliert es, um Regeln neu zu schreiben.Die REST-Route ist eine Neuschreibung wie jede andere, so dass sie verschwindet, wenn sie veraltet sind.
Der Autorisierungs-Header wird entferntNicht authentifizierte Routen funktionieren und authentifizierte Routen berichten, dass Sie nicht angemeldet sind, obwohl Sie es sind.Übergeben Sie den Autorisierungs-Header an PHP auf dem Webserver. CGI-Stil-Setups lassen ihn standardmäßig fallen, und Anwendungspasswörter funktionieren nicht mehr vollständig, wenn sie es tun.
Ein Plugin gibt Ausgabe vor dem JSONDie Antwort ist gültig JSON mit etwas vor ihm - eine Nachricht, eine verirrte leere Linie - die es unparseable macht.Finde das Plugin früh drucken. Die gleiche Streuausgabe bricht normalerweise auch Feeds und erzeugt eine Header-bereits gesendete Warnung an anderer Stelle.
Anleitung

Schritt für Schritt zur Lösung.

Die Befehle setzen WP-CLI und Shell-Zugriff voraus. Jeder Schritt erklärt, was er tut, damit Sie ihn bei Bedarf im Dashboard oder per SFTP ausführen können.

  1. Frag die API nach dem Index

    Diese Route erfordert keine Authentifizierung, daher ist alles andere als JSON die Antwort.

    curl -sS -i https://example.com/wp-json/ | head -n 20
  2. Vergleichen Sie hübsches und einfaches Routing

    Wenn die zweite funktioniert und die erste nicht, sind Umschreiben von Regeln das Problem und nichts anderes muss getestet werden.

    curl -sS -o /dev/null -w '%{http_code}\n' 'https://example.com/wp-json/wp/v2/types'
    curl -sS -o /dev/null -w '%{http_code}\n' 'https://example.com/?rest_route=/wp/v2/types'
  3. Rebuild die Rewrite-Regeln

    Billig, sicher und behebt einen überraschenden Anteil davon.

    wp rewrite flush --hard
  4. Bestätigen Sie, dass der Autorisierungs-Header überlebt

    Fügen Sie dies dem Webserver oder .htaccess hinzu, wenn authentifizierte Routen die einzigen sind, die fehlschlagen.

    # .htaccess
    SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
    
    # nginx + fastcgi
    fastcgi_param HTTP_AUTHORIZATION $http_authorization;
  5. Bisect Plugins, wenn es immer noch fehlschlägt

    Testen Sie die Route zwischen jeder Deaktivierung und nicht am Ende, so dass das Plugin, das sie behebt, eindeutig ist.

    wp plugin deactivate --all
    curl -sS -o /dev/null -w '%{http_code}\n' https://example.com/wp-json/
Mit MagicWP

Darum kümmert sich die Plattform.

Nichts liegt zwischen der Anforderung und WordPress, das /wp-json/ umschreibt oder überprüft, so dass die Route PHP intakt erreicht und der Header mit ihm ankommt - die beiden Ursachen, die die meisten von ihnen ausmachen. Permalink-Regeln sind Teil der eigenen Konfiguration der Website und nicht eine gemeinsame Datei, die andere Websites auch bearbeiten, so dass sie nicht veraltet sind, wenn etwas Nichtverwandtes bereitgestellt wird.

Häufige Fragen

Häufige Fragen.

Kann ich die REST API einfach deaktivieren?
Nicht wirklich. Der Blockeditor, Site Health, Anwendungspasswörter und ein Großteil des wp-admins sind darauf aufgebaut, so dass die Deaktivierung den Admin unterbricht, anstatt ihn zu sichern. Das Einschränken bestimmter Routen auf authentifizierte Benutzer ist die vernünftige Version dieser Idee.
Der Editor sagt "Update gescheitert" - ist das das gleiche Problem?
Normalerweise ja. Der Editor speichert durch die REST-API, so dass eine blockierte oder fehlerhafte Antwort dort zuerst auftaucht, und die Überprüfungen dieser Seite sind die richtigen, die ausgeführt werden.
Warum funktioniert es, wenn ich ausgeloggt, aber nicht eingeloggt bin?
Das zeigt auf den Autorisierungs-Header oder die Cookie-Nonce und nicht auf das Routing. Auch nicht authentifizierte Routen wurden nie benötigt, weshalb sie weiter funktionieren.
Ist ein 404 auf /wp-json/ anders als ein 403?
Eine 404 bedeutet, dass die Route nicht gefunden wurde, was Umschreiben von Regeln ist. Eine 403 bedeutet, dass etwas sie gefunden und abgelehnt hat, was eine Sicherheitsregel ist.