Debug-Checkliste: WordPress REST-API liefert 500

Ein REST-API-Fehler mit HTTP 500 kann in WordPress viele Ursachen haben – von Permalinks über Plugins bis hin zu Server-Regeln. Dieser Beitrag zeigt eine vollständige Debug-Checkliste und eine Entscheidungsübersicht, mit der sich solche Fehler systematisch eingrenzen und lösen lassen.

Ein 500 Internal Server Error bei der WordPress-REST-API gehört zu den frustrierendsten Fehlerbildern: Der Block-Editor lädt nicht mehr, Inhalte lassen sich nicht speichern, und der Website-Zustand meldet kryptische REST-Fehler – oft ohne verwertbare Logs.

Das Problem dabei: Ein 500-Fehler ist kein einzelner Fehler, sondern ein Sammelsymptom.

Die Ursache kann überall liegen – von Permalinks und Rewrite-Regeln über Plugins, Themes und PHP-Inkompatibilitäten bis hin zu Hosting-, WAF- oder Proxy-Konfigurationen. Viele Anleitungen nennen nur „die wahrscheinlichsten“ Ursachen. In der Praxis reicht das oft nicht.

Die folgende Checkliste ist daher bewusst unpriorisiert aufgebaut. Sie dient als systematisches Debug-Werkzeug, mit dem sich REST-API-Fehler reproduzierbar eingrenzen lassen – von banalen Konfigurationsproblemen bis zu seltenen Edge-Cases.

Ideal für alle, die WordPress-Fehler nicht erraten, sondern sauber diagnostizieren wollen.


0 – Vorbereitung: Debug-Modus aktivieren

Bevor du irgendetwas testest, schalte die Fehlerausgabe ein. Ohne Logs ist jede Diagnose Raten.

In der wp-config.php:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
define( 'SCRIPT_DEBUG', true );

Die Logdatei findest du unter wp-content/debug.log. Zusätzlich: PHP-Error-Log des Servers prüfen (Pfad je nach Hoster, oft unter /var/log/ oder im Hosting-Panel).

Tipp: Teste REST-Endpunkte direkt im Browser oder mit curl, um Frontend-Einflüsse auszuschließen:

curl -v https://example.com/wp-json/wp/v2/posts

Checkliste: Systematische Fehlersuche


WasWie
SymptomREST-Routen liefern 404 oder 500, obwohl WordPress funktioniert
AktionEinstellungen → Permalinks → Änderungen speichern (ohne etwas zu ändern)
WarumSchreibt die .htaccess / Rewrite-Regeln neu. Häufigste Ursache nach Migrationen oder Updates.

Falls das nicht hilft: .htaccess manuell prüfen. Standard-WordPress-Block:

# 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

Alles außerhalb dieses Blocks ist potenziell verdächtig.


✅ 2 – Alle Plugins deaktivieren

WasWie
Symptom500 tritt nur bei bestimmten Endpunkten oder nach Plugin-Update auf
AktionAlle Plugins deaktivieren → REST-API testen → einzeln reaktivieren
SchnellwegPer FTP/SSH: wp-content/plugins → umbenennen in plugins_off
# WP-CLI Variante
wp plugin deactivate --all
wp plugin activate plugin-name  # einzeln reaktivieren

Häufige Übeltäter:

  • Security-Plugins (Wordfence, iThemes Security, Sucuri)
  • Caching-Plugins (WP Rocket, LiteSpeed Cache, W3 Total Cache)
  • REST-API-modifizierende Plugins (Disable REST API, Custom Endpoints)
  • Page Builder mit eigenen API-Routen

✅ 3 – Theme auf Standard wechseln

WasWie
Symptom500 verschwindet nach Plugin-Deaktivierung nicht
AktionAuf Twenty Twenty-Four (oder aktuelles Default-Theme) wechseln
Schnellwegwp theme activate twentytwentyfour

Themes können über functions.php oder rest_api_init-Hooks die API beeinflussen. Besonders bei Custom Themes mit eigenen Endpunkten.


✅ 4 – PHP-Version und Limits prüfen

PrüfpunktEmpfehlung
PHP-VersionMindestens 8.0, empfohlen 8.2+
memory_limitMindestens 256M
max_execution_timeMindestens 120
post_max_sizeMindestens 64M
upload_max_filesizeMindestens 64M

In wp-config.php:

define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' );

In php.ini oder .user.ini:

memory_limit = 256M
max_execution_time = 120
post_max_size = 64M

Prüfen:

wp eval "phpinfo();" | grep -E "memory_limit|max_execution|post_max"
# oder im Browser:
# https://example.com/wp-json/  → Liefert der Index-Endpunkt eine Antwort?

✅ 5 – WordPress-Core-Dateien prüfen

WasWie
Symptom500 nach Core-Update oder nach Hack-Verdacht
AktionCore-Dateien auf Integrität prüfen
wp core verify-checksums

Bei Abweichungen:

wp core download --force --skip-content

✅ 6 – Datenbank-Probleme ausschließen

WasWie
SymptomSporadische 500er, langsame Antworten, Timeout-Fehler
AktionDatenbank reparieren und optimieren

In wp-config.php temporär:

define( 'WP_ALLOW_REPAIR', true );

Dann aufrufen: https://example.com/wp-admin/maint/repair.php

# WP-CLI
wp db repair
wp db optimize

Prüfe auch die wp_options-Tabelle auf aufgeblähte autoload-Einträge:

SELECT LENGTH(option_value) as size, option_name
FROM wp_options
WHERE autoload = 'yes'
ORDER BY size DESC
LIMIT 20;

✅ 7 – Server-Konfiguration: mod_security / WAF

WasWie
Symptom500 nur bei POST/PUT-Requests, bei bestimmten Inhalten oder sporadisch
Aktionmod_security-Logs prüfen, WAF-Regeln testen

Typische Auslöser:

  • Inhalte mit <script>, <iframe> oder SQL-ähnlichen Strings
  • Große POST-Bodys
  • Bestimmte User-Agents

Temporär in .htaccess testen:

<IfModule mod_security2.c>
SecRuleEngine Off
</IfModule>

⚠️ Nur zum Testen! Danach sofort wieder aktivieren.

Bei Cloudflare, Sucuri oder anderen externen WAFs: Regeln im Dashboard prüfen, ggf. REST-API-Pfade whitelisten.


✅ 8 – Reverse Proxy / Load Balancer

WasWie
Symptom500 nur in Produktion, nicht lokal. Oder: REST liefert HTML statt JSON
AktionProxy-Header und Weiterleitungen prüfen

Häufige Probleme:

  • Nginx vor Apache: try_files leitet /wp-json/ nicht korrekt weiter
  • Cloudflare Proxy: Timeout bei langen Requests
  • Varnish Cache: Cached fehlerhafte Antworten

Nginx-Fix für REST-API:

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

✅ 9 – SSL / Mixed Content

WasWie
SymptomREST-API funktioniert über HTTP, aber nicht über HTTPS (oder umgekehrt)
Aktionsiteurl und home in wp_options prüfen
wp option get siteurl
wp option get home

Beide müssen identisch sein und das korrekte Protokoll verwenden. Mismatch = Redirect-Loop = 500.


✅ 10 – REST-API gezielt testen

Teste verschiedene Endpunkte, um den Fehler einzugrenzen:

# Basis-Check: API erreichbar?
curl -s https://example.com/wp-json/ | head -20

# Öffentlicher Endpunkt (kein Auth nötig)
curl -s https://example.com/wp-json/wp/v2/posts

# Authentifizierter Endpunkt
curl -s -u admin:APPLICATION_PASSWORD https://example.com/wp-json/wp/v2/users/me

# POST-Request testen
curl -X POST https://example.com/wp-json/wp/v2/posts   -u admin:APPLICATION_PASSWORD   -H "Content-Type: application/json"   -d '{"title":"Test","status":"draft"}'

# Spezifischer Plugin-Endpunkt
curl -s https://example.com/wp-json/wp-site-health/v1/tests/dotorg-communication

Auswertung:

ErgebnisDeutet auf
Alle Endpunkte 500Server-/Core-Problem
Nur POST/PUT 500WAF / mod_security / Body-Size-Limit
Nur bestimmte Routen 500Plugin-/Theme-spezifisch
Nur mit Auth 500Auth-Plugin oder User-bezogenes Problem
Nur sporadisch 500Ressourcen-Limit, DB-Lock, Caching

✅ 11 – Cron und REST-API-Abhängigkeiten

WasWie
Symptom500 bei Loopback-Requests, Site Health meldet Fehler
AktionLoopback-Verbindung testen
# Kann der Server sich selbst erreichen?
wp eval "var_dump(wp_remote_get(rest_url()));"

Häufig bei:

  • Hosts, die Loopback blockieren
  • Falsche DNS-Auflösung (z. B. bei Staging-Domains)
  • ALTERNATE_WP_CRON aktiv, aber REST blockiert

✅ 12 – Object Cache / Redis / Memcached

WasWie
Symptom500 nach Cache-Änderung oder sporadisch
AktionObject Cache leeren oder object-cache.php temporär entfernen
wp cache flush
# oder
mv wp-content/object-cache.php wp-content/object-cache.php.bak

Entscheidungsübersicht: Schnelle Eingrenzung

REST-API liefert 500
│
├─ Tritt der Fehler bei ALLEN Endpunkten auf?
│  ├─ JA → Permalinks zurücksetzen (#1)
│  │       → .htaccess / Nginx prüfen (#1, #8)
│  │       → PHP-Fehlerlog prüfen (#0)
│  │       → Core-Dateien prüfen (#5)
│  │
│  └─ NEIN → Welche Endpunkte sind betroffen?
│           ├─ Plugin-Endpunkte → Plugin deaktivieren (#2)
│           ├─ Nur POST/PUT → WAF / mod_security (#7)
│           └─ Nur mit Auth → Auth-Plugin / Cookies (#2, #10)
│
├─ Tritt der Fehler nur in Produktion auf?
│  ├─ JA → Proxy / CDN / WAF prüfen (#7, #8)
│  └─ NEIN → Lokales Problem: PHP, Plugins, Theme (#2–#6)
│
├─ Tritt der Fehler sporadisch auf?
│  ├─ JA → Ressourcen-Limits (#4)
│  │       → Datenbank (#6)
│  │       → Object Cache (#12)
│  └─ NEIN → Reproduzierbar = gezielt testbar (#10)
│
└─ Fehler nach Update aufgetreten?
   ├─ Core-Update → Checksums prüfen (#5)
   ├─ Plugin-Update → Plugin isolieren (#2)
   ├─ PHP-Update → Kompatibilität prüfen (#4)
   └─ Hosting-Änderung → Server-Config prüfen (#7, #8)

Handlungsempfehlungen nach Diagnose

Ursache gefundenEmpfohlene Maßnahme
Permalinks / .htaccessNeu speichern; bei Custom Rules: dokumentieren und versionieren
Plugin-KonfliktPlugin-Autor kontaktieren, Alternative suchen, oder Konflikt im Support-Forum melden
Theme-ProblemChild-Theme verwenden, functions.php-Hooks isolieren
PHP-VersionUpgrade planen, vorher Kompatibilität mit PHP Compatibility Checker testen
Speicher-/ZeitlimitsHosting-Paket prüfen; bei Shared Hosting: Upgrade auf Managed WordPress
WAF / mod_securityRegeln gezielt anpassen, nicht pauschal deaktivieren; REST-Pfade whitelisten
Proxy / CDNCache-Regeln für /wp-json/* anpassen; API-Pfade vom Caching ausschließen
DatenbankRegelmäßige Optimierung einplanen; autoload-Bloat überwachen
Object CacheDrop-In aktuell halten; bei Problemen: Redis/Memcached-Verbindung prüfen
Core-Dateien beschädigtNeu installieren via wp core download --force --skip-content

Fazit

Ein 500-Fehler der REST-API ist kein Grund zur Panik – aber auch kein Problem, das sich mit einem einzelnen Tipp lösen lässt. Die systematische Vorgehensweise über diese Checkliste stellt sicher, dass keine Ursache übersehen wird.

Drei Grundregeln für die Praxis:

  1. Immer zuerst Logs aktivieren – ohne WP_DEBUG_LOG und Server-Error-Log ist jede Diagnose Zufall.
  2. Isolieren statt raten – Plugins einzeln testen, Endpunkte gezielt ansprechen, Umgebungen vergleichen.
  3. Dokumentieren – Halte fest, was du getestet hast und was das Ergebnis war. Das spart Zeit beim nächsten Mal und hilft im Support-Fall.

Hast du einen Edge-Case gefunden, der hier fehlt? Schreib ihn in die Kommentare – diese Checkliste wird laufend erweitert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert