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.
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.
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.
| Ursache | So prüfen Sie es | Lösung |
|---|---|---|
| Ein Sicherheits-Plugin oder WAF blockiert die Route | Die 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 wird | Die 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 entfernt | Nicht 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 JSON | Die 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. |
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.
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
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'Rebuild die Rewrite-Regeln
Billig, sicher und behebt einen überraschenden Anteil davon.
wp rewrite flush --hard
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;
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/
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.
Kann ich die REST API einfach deaktivieren?
Der Editor sagt "Update gescheitert" - ist das das gleiche Problem?
Warum funktioniert es, wenn ich ausgeloggt, aber nicht eingeloggt bin?
Ist ein 404 auf /wp-json/ anders als ein 403?
War es keiner davon?
Diese Fehler können im Browser ähnlich aussehen.