Een bezoeker mailt: “Uw website geeft een 500-fout.” U opent de site en ziet inderdaad een kale pagina met “500 Internal Server Error” of, afhankelijk van de hosting, een wat vriendelijker vormgegeven variant met dezelfde boodschap. Geen uitleg. Geen aanwijzing. Het woord “server” doet vermoeden dat het bij de hosting ligt, en dat is soms zo, maar vaker niet.

Een error 500 in WordPress is een verzamelnaam. De server zegt alleen: ik kreeg een verzoek en er ging iets mis waar ik geen specifiekere code voor heb. Wat er precies misging, moet u zelf achterhalen. Dit artikel loopt de oorzaken langs in de volgorde waarin ze in de praktijk het vaakst voorkomen, met per oorzaak wat u kunt controleren.

Wat een 500-fout wel en niet zegt

HTTP-statuscodes in de 500-reeks betekenen dat de fout aan de serverkant ligt, in tegenstelling tot de 400-reeks (zoals 404) waar het verzoek van de bezoeker het probleem is. Maar “serverkant” omvat alles wat op de server draait, dus ook uw WordPress-installatie, uw thema en uw plugins. De hosting is slechts één van de mogelijkheden.

Wat het onderscheidt van verwante codes: een 502 betekent dat een tussenliggende server geen goed antwoord kreeg, een 503 dat de dienst tijdelijk niet beschikbaar is, een 504 dat het te lang duurde. Een 500 is de restcategorie. Over de 502 in het bijzonder leest u meer in dit artikel over 502 Bad Gateway.

Zes oorzaken van een error 500 in WordPress

Oorzaak 1: een beschadigd .htaccess-bestand

Op de meeste Nederlandse hostingpakketten draait Apache of LiteSpeed, en die lezen bij elk verzoek het bestand .htaccess in de hoofdmap van uw site. Eén verkeerde regel daarin, bijvoorbeeld achtergelaten door een beveiligings-, cache- of redirectplugin, en de server geeft een 500 nog voordat WordPress geladen is. Dit is de eerste plek om te kijken, omdat het snel te testen is: hernoem het bestand via FTP naar .htaccess-oud en herlaad de site. Werkt het, dan is het gevonden. Hoe u het bestand vervolgens netjes herstelt, staat in dit artikel over een corrupt .htaccess-bestand.

Oorzaak 2: een fatale PHP-fout die WordPress niet kon opvangen

Normaal gesproken toont WordPress bij een fatale fout een melding over een “critical error”. Maar als de fout heel vroeg optreedt, in wp-config.php bijvoorbeeld, of in een plugin die vóór het vangnet wordt geladen, dan komt de server niet verder dan een 500. Ook een geheugentekort valt hier vaak onder. De aanwijzing staat in het foutenlog van de hosting: zoek naar “PHP Fatal error” met een tijdstip dat overeenkomt met het begin van de storing. Het pad erachter noemt de plugin of het thema.

Oorzaak 3: een PHP-versie die niet meer past

Hostingpartijen zetten verouderde PHP-versies uit en verhogen soms de versie voor alle klanten tegelijk. Een verlaten plugin of een oud thema dat op PHP 7.4 nog net werkte, geeft op 8.x een fatale fout. Kijk in het hostingpaneel welke versie actief is en of die recent is gewijzigd. Terugzetten naar de vorige versie is een tijdelijke uitweg; de echte oplossing is de oude code vervangen.

Oorzaak 4: bestandsrechten of eigenaar

Na een verhuizing of een handmatige upload kunnen bestanden verkeerde rechten hebben. PHP-bestanden met rechten 777 worden door sommige servers geweigerd uit veiligheid, en dat geeft een 500. De gangbare instelling is 644 voor bestanden en 755 voor mappen. Dit is vooral een verdachte als de fout begon direct na een verhuizing of na het uploaden van bestanden.

Oorzaak 5: beschadigde kernbestanden

Een half mislukte WordPress-update laat soms bestanden achter die niet compleet zijn. De oplossing is de map wp-admin en wp-includes opnieuw uploaden vanuit een verse download van dezelfde WordPress-versie, zonder de map wp-content aan te raken. Dat klinkt ingrijpend, maar het overschrijft alleen de kern, niet uw inhoud, thema of plugins.

Oorzaak 6: de hosting zelf

Pas als de vorige vijf zijn uitgesloten, wordt de hosting waarschijnlijk. Een overbelaste server, een vastgelopen PHP-proces, een volle schijf of een storing bij de hostingpartij. Aanwijzingen: de fout komt en gaat, andere sites op dezelfde hosting doen het ook niet, of de statuspagina van de hosting meldt onderhoud. In dat geval helpt geen enkele aanpassing aan uw site; bel of mail de hosting en noem het tijdstip en de foutcode.

De volgorde in de praktijk

  1. Kijk of het beheer (/wp-admin) wel werkt. Zo ja, dan zit het waarschijnlijk in het thema of een plugin die alleen aan de voorkant actief is.
  2. Open het foutenlog en zoek de laatste fatale fout. Dit bepaalt vaak direct het antwoord.
  3. Test .htaccess door het te hernoemen.
  4. Schakel plugins uit door de map te hernoemen; daarna één voor één terug.
  5. Controleer PHP-versie en bestandsrechten in het hostingpaneel.
  6. Vervang de kernbestanden als het log naar wp-includes of wp-admin wijst.
  7. Bel de hosting als niets van het bovenstaande de fout beïnvloedt.

Maak voor elke stap die iets verandert een back-up, ook als het maar het hernoemen van een bestand is. En houd bij wat u gedaan heeft, zodat u het kunt terugdraaien of doorgeven.

Een praktijkvoorbeeld

Een fysiotherapeut in Tilburg kreeg op een dinsdag een 500 op de hele site. De hosting zei dat er niets aan de hand was. Het foutenlog liet een fatale fout zien in een plugin voor sociale-mediaknoppen, die drie jaar niet was bijgewerkt. De hostingpartij had de nacht ervoor PHP 7.4 uitgezet. De plugin uitschakelen loste de fout op; de knoppen bleken al een jaar door niemand gebruikt. Totale tijd: twintig minuten, waarvan vijftien om het log te vinden.

Zelf doen of hulp inschakelen

De stappen hierboven zijn te doen voor wie een beetje handig is met FTP en een hostingpaneel. Wordt de site bezocht door klanten die iets willen bestellen of boeken, dan is elke minuut zoeken geld, en is het verstandig om het direct uit handen te geven. Het oplossen van een 500-fout is standaardwerk bij WordPress-bugfixing; bij een bureau als WebMaintor is de oorzaak in de meeste gevallen binnen het uur gevonden en verholpen, met een back-up vooraf. Geef daarbij door wat u al geprobeerd heeft en wanneer de fout begon; dat verkort het werk voor iedereen.