De varianten:
- 403 Forbidden
- HTTP Error 403
- 403 — Forbidden: Access is denied
- "You don't have permission to access this resource"
- "Access Denied — You are not authorized to access this site"
- "Forbidden: You don't have permission to access [URL] on this server"
- Cloudflare-pagina met "Error 1010" / "Error 1015" (rate limiting / WAF)
Wat betekent een 403?
Op HTTP-niveau zegt een 403: "De server kan jouw verzoek lezen, vindt 't begrijpelijk, maar weigert toegang." Drie dingen om uit te halen:
- De pagina/resource bestaat waarschijnlijk wel (anders 404)
- De server functioneert wel (anders 500)
- Iets — file permissions, een server-rule, een firewall — zegt expliciet "geen toegang"
Onderscheid met buurman-codes:
- 401 Unauthorized — login vereist, jij bent niet ingelogd
- 403 Forbidden — toegang sowieso geweigerd, ook met login niet meer
- 404 Not Found — bestand/pagina bestaat niet
- 500 Internal Server Error — server-fout. Zie 500 Internal Server Error oplossen
- 503 Service Unavailable — tijdelijk niet beschikbaar (overload). Zie 503 Service Unavailable oplossen
Stap 1: identificeer het type 403
Twee belangrijke vragen:
- Hele site of één pagina? — site-breed wijst naar permissies of
.htaccess; specifieke pagina vaak hotlink-protectie of WAF - Voor iedereen of alleen sommige bezoekers? — voor jou wel maar bezoekers niet wijst op IP-block of geo-restrictie
- Welke browser-output? — Cloudflare-fout met Ray ID is iets anders dan Apache-default 403 of een aangepaste hosting-foutpagina
De zes meest voorkomende oorzaken
1. Verkeerde file permissions
Op Linux-hosting moeten bestanden en mappen specifieke permissies hebben — anders weigert Apache/Nginx ze te serveren.
Wat correct is:
- Mappen:
755(drwxr-xr-x) - PHP-bestanden:
644(rw-r--r--) - Configuratie-bestanden zoals wp-config.php:
600of640 - NIET:
777(te ruim, wordt soms door hosting geweigerd) of600op normale pagina-bestanden (dan kan webserver ze niet lezen)
Diagnose: via SSH
# Check permissies
ls -la /home/jouwsite/public_html/
# Bestanden met afwijkende permissies
find . -type f ! -perm 644 -ls | head -20
find . -type d ! -perm 755 -ls | head -20
Fix:
cd /home/jouwsite/public_html
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 600 wp-config.php # extra strict voor config
Veroorzaakt vaak ook 500-fouten als de permissies te krap of te ruim staan — soms zie je dus een mix van 403 en 500.
2. .htaccess deny-rule of corruptie
Een .htaccess-bestand kan toegang per pad of per criterium expliciet weigeren. Verkeerd geconfigureerd of corrupt en de hele site (of een directory) is afgesloten.
Voorbeelden van rules die 403 veroorzaken:
# Blokkeer toegang voor IP-range
Deny from 1.2.3.0/24
# Apache 2.4 syntax
<RequireAll>
Require not ip 1.2.3.0/24
</RequireAll>
# Geen directory listing
Options -Indexes
# Block specifieke files
<Files "wp-config.php">
Require all denied
</Files>
Diagnose: hernoem .htaccess tijdelijk naar .htaccess.bak. Werkt site weer? Probleem zat in htaccess. Voeg regels één voor één terug om te isoleren welke.
Voor WordPress: schone default .htaccess:
# 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
Zie ook .htaccess uitgelegd.
3. Index-bestand ontbreekt
Wanneer iemand https://jouwsite.nl/ opent, zoekt Apache naar index.html, index.php of een andere geconfigureerde index file. Als die ontbreekt en directory listing uit staat: 403.
Bij WordPress zou er index.php in webroot moeten staan. Ontbreekt die? Re-install WordPress core via WP-CLI:
wp core download --force
Of upload index.php via FTP vanuit een schone WP-zip.
4. ModSecurity / WAF blokkeert
Op shared hosting met ModSecurity actief: bepaalde requests die op een aanval lijken (formulier-submits met SQL-achtige tekens, file-uploads met verdachte content, REST API-calls) worden geweigerd met 403. Vaak in error_log: ModSecurity: Access denied with code 403.
Symptoom: 403 alleen op specifieke acties (form-submit, plugin-install, file-upload). Site werkt verder normaal.
Fix: hosting support contacten, vraag om die specifieke ModSecurity-rule uit te schakelen voor jouw site of voor die URL. Niet zelf in code workarounds proberen — zit op server-niveau, niet in WordPress.
5. Hotlink-protection actief
Hotlink-protection blokkeert dat externe sites jouw afbeeldingen direct embedden. Werkt door de Referer-header te checken: requests met andere referer dan jouw eigen domein → 403 op de afbeelding.
Soms te streng ingesteld, dan zien jouw eigen bezoekers ook 403's op afbeeldingen — bijvoorbeeld bij requests zonder referer of vanuit andere subdomeinen.
Diagnose: open een afbeelding-URL direct in incognito; geeft 'ie 403 maar werkt 'ie wel embed in de site? Hotlink-protection.
Fix: in .htaccess hotlink-protection vinden en aanpassen of weghalen. Voorbeeld-regels die je zoekt:
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?jouwsite\.nl [NC]
RewriteRule \.(jpg|jpeg|png|gif|webp)$ - [F]
Of in cPanel: "Hotlink Protection" — controleer instellingen, voeg subdomeinen toe of zet uit.
6. Hosting-niveau IP-block of geo-block
Hosting heeft jouw IP geblokkeerd na verdacht gedrag (bijv. te veel mislukte login-pogingen) of er staat een geo-restrictie op die landen weigert. Bij Cloudflare:
- Error 1006 / 1007 / 1008: IP/ASN/Land geblokkeerd
- Error 1010: bezoeker's browser-fingerprint geweigerd
- Error 1015: rate limited
- Error 1020: Access Rule geblokkeerd
Diagnose: test vanaf een ander netwerk (mobiele 4G, VPN). Werkt 't vanaf elders wel? Dan is jouw IP geblokkeerd. In Cloudflare zie je in Security Events welke regel je trigger.
Fix:
- Hosting-firewall / fail2ban: log in via SSH/paneel en whitelist je eigen IP
- Cloudflare: Security → WAF → Tools → IP Access Rules — controleer en pas aan
- Bij vermoeden van false positive: contact Cloudflare/hoster
Specifieke scenario's
403 op /wp-admin/ of /wp-login.php
Inloggen niet meer mogelijk — vrijwel altijd een security-plugin (Wordfence, iThemes Security) die een IP heeft geblokkeerd na mislukte logins. Of een handmatige .htaccess-rule:
<Files wp-login.php>
Require ip 1.2.3.4
</Files>
Fix:
- Via FTP: hernoem de security-plugin's map om 'm tijdelijk uit te zetten
- Via database: in
wp_optionsde plugin-block-list zoeken (vaak initsec_*ofwordfence_*rijen) .htaccessregel verwijderen of jouw IP toevoegen
403 op /xmlrpc.php
XML-RPC wordt vaak bewust geblokkeerd via .htaccess als security-maatregel — het is een populair brute-force-doel. Dit is meestal correct gedrag, geen probleem. Alleen als je een externe app gebruikt die XML-RPC nodig heeft (oudere mobiele app, Jetpack zonder REST API), moet je 'm openzetten.
403 op uploads-folder
WordPress' wp-content/uploads/ moet leesbaar zijn voor bezoekers (afbeeldingen). 403 hier wijst op:
- Verkeerde permissies op de uploads-map (moet 755)
.htaccessin uploads-map die te streng blokkeert (vaak na een security-plugin install)- Open Directory listing geweigerd terwijl er geen index-file is — meestal gewenst gedrag, niet probleem behalve als je naar een directory navigeert
403 alleen op specifieke admin-acties
Plugin-installatie, theme-upload, of bulk-update geeft 403 — bijna altijd ModSecurity die de POST-request afkeurt. Hosting-side rule uitschakelen.
403 sinds een security-plugin install
De plugin heeft regels toegevoegd die te streng zijn, of jouw eigen IP in de block-list gezet. Plugin via FTP deactiveren door map te hernoemen, dan voorzichtiger configureren.
Snelle diagnose-checklist
- Hele site of specifieke URL? Voor iedereen of alleen jou?
- Zou je dezelfde URL via een ander netwerk (4G, VPN) wél kunnen bereiken? IP-block waarschijnlijk
- Open server error_log, zoek
ModSecurity,permission denied,client denied - Hernoem
.htaccessnaar.htaccess.bak— werkt site weer? Het zat in htaccess - Check file permissions (755 voor mappen, 644 voor files)
- Recent een security-plugin geïnstalleerd? Vaak deze de boosdoener
- Cloudflare aan? Check Security Events op recent geblokkeerde requests
- Hosting paneel hotlink-protection of IP-block actief?
Wanneer schakel je hulp in?
- Je bent uit wp-admin geblokkeerd door een security-plugin en weet niet hoe je 't terug deactiveert zonder paniek
- 403 alleen voor sommige bezoekers — geo-block of WAF-rule met false positives die je niet identificeert
- Hosting wijst naar ModSecurity, jij wilt regelspecifiek uitzetten zonder al te veel security te verlagen
- Hotlink-protection blokkeert je eigen valide bezoekers en je weet niet welke regel het is
- 403 in combinatie met andere errors (500, 502) — meerdere oorzaken tegelijk vragen geconsolideerde diagnose
- WooCommerce-shop, betaal-callback geeft 403 — orders gaan stuk
- 403 op /wp-login.php en je hebt geen FTP-toegang — vraagt om hosting-side hulp
Een 403 is in 80% van de gevallen op te lossen met "fix file permissions, vervang htaccess, deactiveer security-plugin." Met de stappen hierboven vind je dat snel. De resterende 20% — Cloudflare-config, ModSecurity-tuning, hostingblock — vraagt vaak hosting-side toegang die je zelf niet hebt. Dan is 't makkelijker een derde te vragen die wel ervaring heeft met die kant.