Erreurs 404 ou 403 de l’API REST (alors que ça devrait fonctionner)

Vous construisez un bloc. Vous connectez un frontend headless. Ou vous essayez simplement d’utiliser l’éditeur de site. Tout semble correct. Puis vous ouvrez la console du navigateur et vous voyez :

GET /wp-json/wp/v2/posts → 404 Not Found

Ou pire :

403 Forbidden

L’API REST de WordPress devrait fonctionner par défaut. Mais parfois, ce n’est pas le cas. Et les messages d’erreur peuvent être trompeurs.

Ce guide explique pourquoi les requêtes à l’API REST échouent avec des erreurs 404 ou 403 — même quand vous n’avez rien fait de mal — et comment les corriger.

Table des matières

  1. Comprendre les erreurs de l’API REST
  2. Erreurs 404 : « Non trouvé »
  3. Erreurs 403 : « Interdit »
  4. Dépannage étape par étape
  5. Tester votre API REST

1. Comprendre les erreurs de l’API REST

L’API REST de WordPress est un outil puissant. Elle permet aux applications externes (et à l’éditeur de blocs) d’interagir avec votre site.

Ce qui devrait arriver :

  • Visiter https://votresite.com/wp-json/ devrait renvoyer un objet JSON
  • Visiter https://votresite.com/wp-json/wp/v2/posts devrait renvoyer une liste d’articles

Ce qui arrive parfois en réalité :

  • Une page 404 (HTML, pas JSON)
  • Une page blanche
  • Un message 403 « Interdit »
  • Une boucle de redirection infinie

L’essentiel à comprendre : les erreurs 404 et 403 sur les endpoints de l’API REST ne sont généralement pas des problèmes d’authentification. Ce sont presque toujours des problèmes de configuration du serveur.

ErreurSignificationCause la plus fréquente
404Endpoint non trouvéPermaliens, .htaccess ou configuration Nginx
403Accès refuséExtension de sécurité, pare-feu de l’hébergement ou règles serveur

2. Erreurs 404 : « Non trouvé »

Un 404 sur wp-json signifie que le serveur ne reconnaît pas les routes de l’API REST. La requête atteint WordPress, mais quelque chose bloque les règles de réécriture.

Cause #1 : Permaliens non définis sur « jolis »

L’API REST nécessite des permaliens « jolis ». Si vos permaliens sont en mode « simple » (?p=123), les routes REST renvoient une 404.

Vérification : Réglages → Permaliens → Une option autre que « Simple » est-elle sélectionnée ?

Correction : Sélectionnez n’importe quelle option autre que « Simple » (par exemple « Titre de l’article ») et cliquez sur Enregistrer les modifications.

Pourquoi ça fonctionne : Enregistrer les permaliens régénère le fichier .htaccess (Apache) ou vide les règles de réécriture.

Cause #2 : Fichier .htaccess corrompu (serveurs Apache)

Sur les serveurs Apache, les règles de réécriture se trouvent dans .htaccess. Si ce fichier est manquant ou corrompu, les routes REST renvoient une 404.

Correction via WordPress :

  1. Allez dans Réglages → Permaliens
  2. Cliquez sur Enregistrer les modifications (pas besoin de changer quoi que ce soit)
  3. Cela régénère les règles de réécriture

Correction via FTP :

  1. Connectez-vous en FTP
  2. Accédez à votre dossier racine WordPress
  3. Cherchez .htaccess (activez l’affichage des fichiers cachés si nécessaire)
  4. S’il est manquant, créez-le avec ce contenu :

apache

# 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
  1. Enregistrez et rafraîchissez votre site

Cause #3 : Règles de réécriture Nginx manquantes

Si vous utilisez Nginx, vous avez besoin de règles de réécriture explicites. La configuration Nginx standard pour WordPress doit inclure :

nginx

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

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

Correction : Ajoutez le bloc location pour wp-json à votre configuration Nginx, puis rechargez Nginx (sudo systemctl reload nginx).

Vous n’avez pas accès ? Contactez votre support d’hébergement et demandez-leur de vérifier que les règles de réécriture de l’API REST sont en place.

Cause #4 : Extension bloquant l’API REST

Certaines extensions désactivent intentionnellement l’API REST pour des raisons de « sécurité » (ce qui est généralement inutile et casse des fonctionnalités).

Coupables courants :

  • Extensions Disable REST API
  • Extensions de sécurité avec des fonctionnalités de verrouillage de l’API REST
  • Extensions de mode maintenance
  • Extensions de blocage de connexion

Correction :

  1. Désactivez temporairement toutes les extensions
  2. Testez https://votresite.com/wp-json/
  3. Si ça fonctionne, réactivez les extensions une par une pour trouver le coupable
  4. Reconvertissez ou remplacez l’extension problématique

Cause #5 : Blocage au niveau de l’hébergement

Certains hébergements WordPress gérés bloquent l’accès à l’API REST pour les utilisateurs non authentifiés par défaut. C’est rare, mais cela arrive.

Correction : Contactez votre hébergeur et demandez :

« L’API REST WordPress est-elle activée pour les requêtes non authentifiées ? J’obtiens une 404 sur /wp-json/. »

3. Erreurs 403 : « Interdit »

Une erreur 403 signifie que le serveur a compris la requête mais refuse de l’exécuter. C’est généralement un problème d’authentification ou de sécurité.

Cause #1 : Extension de sécurité bloquant l’accès REST

La plupart des extensions de sécurité ont une fonctionnalité pour bloquer l’accès à l’API REST pour les utilisateurs non connectés.

Vérifiez dans les réglages de votre extension de sécurité :

  • « Désactiver l’API REST » ou « Verrouillage de l’API REST »
  • « Bloquer les requêtes REST non autorisées »
  • « Exiger une authentification pour l’API REST »

Correction : Ajoutez à la liste blanche les endpoints spécifiques dont vous avez besoin, ou désactivez complètement le blocage de l’API REST (cela n’améliore pas vraiment la sécurité dans la plupart des cas).

Extensions populaires avec restrictions REST :

  • Wordfence — Vérifiez les réglages « Protection contre la force brute »
  • iThemes Security — Cherchez les réglages « API REST »
  • Sucuri — Les règles du pare-feu peuvent bloquer certains endpoints
  • All In One WP Security — Onglet « API REST »

Cause #2 : Blocage au niveau serveur (ModSecurity)

Certains hébergeurs utilisent ModSecurity ou d’autres WAF (pare-feu applicatifs web) qui bloquent les requêtes à l’API REST contenant certains motifs.

Motifs courants qui déclenchent des blocages :

  • Requêtes avec de nombreux paramètres
  • Requêtes contenant des chaînes de type SQL
  • Requêtes provenant de certains agents utilisateurs

Correction :

  1. Vérifiez dans votre panneau de contrôle d’hébergement les logs ModSecurity
  2. Désactivez temporairement ModSecurity (si autorisé) pour tester
  3. Demandez à votre hébergeur d’ajouter wp-json/* à la liste blanche
  4. Ou demandez-lui d’ajuster la règle qui cause le faux positif

Cause #3 : Règres de refus dans .htaccess

Des règles .htaccess personnalisées peuvent explicitement bloquer l’accès à wp-json.

Vérifiez votre .htaccess pour :

apache

Deny from all
<Files "wp-json">
    Deny from all
</Files>

Correction : Supprimez toutes les règles qui bloquent wp-json ou l’API REST.

Cause #4 : Authentification manquante ou incorrecte (pour les routes protégées)

Certains endpoints de l’API REST nécessitent une authentification :

  • Création/modification d’articles (nécessite la capacité edit_posts)
  • Suppression de commentaires (nécessite moderate_comments)
  • Récupération des utilisateurs (nécessite list_users)

Si vous appelez ces endpoints sans authentification, vous obtiendrez une 403.

Correction : Ajoutez une authentification à vos requêtes :

  • Pour JavaScript (éditeur de blocs) : Utilisez wpApiSettings.nonce
  • Pour les applications externes : Utilisez Mots de passe d’application (WordPress 5.6+)
  • Pour du code personnalisé : Utilisez l’authentification par cookie ou des extensions OAuth

Exemple d’ajout de nonce à une requête fetch :

javascript

fetch('/wp-json/wp/v2/posts', {
    headers: {
        'X-WP-Nonce': wpApiSettings.nonce
    }
})

Cause #5 : Pare-feu de l’hébergement (Cloudflare, Sucuri, etc.)

Les CDN et pare-feux bloquent parfois les requêtes à l’API REST, surtout si elles contiennent des charges utiles JSON.

Correction :

  • Ajoutez une règle de pare-feu pour autoriser */wp-json/*
  • Mettez temporairement le CDN/pare-feu en pause pour tester
  • Vérifiez les logs de sécurité du pare-feu pour les requêtes bloquées

4. Dépannage étape par étape

Suivez cette liste de vérification dans l’ordre. Testez après chaque étape.

Étape 1 : Testez l’endpoint REST de base

  • Visitez https://votresite.com/wp-json/ dans votre navigateur
  • Vous devriez voir un objet JSON avec namedescriptionurl, etc.
  • Si vous voyez une 404 ou 403 → continuez

Étape 2 : Enregistrez les permaliens

  • Allez dans Réglages → Permaliens
  • Cliquez sur Enregistrer les modifications (pas besoin de changer quoi que ce soit)
  • Testez à nouveau

Étape 3 : Désactivez toutes les extensions

  • Désactivez chaque extension
  • Testez https://votresite.com/wp-json/
  • Si ça fonctionne → réactivez les extensions une par une pour trouver le coupable

Étape 4 : Basculez vers un thème par défaut

  • Activez temporairement Twenty Twenty-Four ou Twenty Twenty-Three
  • Testez à nouveau
  • Si cela corrige le problème, votre thème bloque l’API REST

Étape 5 : Vérifiez votre fichier .htaccess

  • Via FTP, ouvrez .htaccess dans votre racine WordPress
  • Assurez-vous que les règles WordPress par défaut sont présentes (voir section 2, Cause #2)
  • Si elles sont manquantes, ajoutez-les et enregistrez

Étape 6 : Vérifiez les règles de réécriture du serveur (Nginx uniquement)

  • Assurez-vous que votre configuration Nginx inclut le bloc location pour wp-json
  • Si vous n’avez pas accès, contactez votre hébergeur

Étape 7 : Vérifiez les extensions de sécurité

  • Cherchez les fonctionnalités de blocage de l’API REST (voir section 3, Cause #1)
  • Désactivez temporairement l’extension de sécurité pour tester

Étape 8 : Vérifiez le pare-feu de votre hébergement

  • Vérifiez les logs ModSecurity ou les logs du pare-feu d’hébergement
  • Désactivez temporairement (si possible) pour tester
  • Contactez le support pour ajouter /wp-json/* à la liste blanche

Étape 9 : Activez le débogage WordPress
Ajoutez à wp-config.php :

php

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

Consultez ensuite wp-content/debug.log pour les erreurs liées à l’API REST.

5. Tester votre API REST

Test rapide (navigateur)

  1. Ouvrez votre navigateur
  2. Visitez : https://votresite.com/wp-json/
  3. Résultat attendu : objet JSON, pas du HTML

Test en ligne de commande

bash

curl https://votresite.com/wp-json/wp/v2/posts

Résultat attendu : tableau JSON d’articles (peut être vide).

Vérifier uniquement le code d’état HTTP

bash

curl -I https://votresite.com/wp-json/

Attendu : HTTP/1.1 200 OK (pas 404, 403 ou 301/302).

Test avec authentification (pour les endpoints protégés)

bash

curl -X GET https://votresite.com/wp-json/wp/v2/users/me \
  --header 'X-WP-Nonce: VOTRE_NONCE' \
  --cookie 'wordpress_logged_in_VOTRE_HASH'

Correctifs en une ligne à essayer d’abord

Pour 404 :

bash

# Enregistrez les permaliens (visitez cette URL connecté)
https://votresite.com/wp-admin/options-permalink.php

Pour 403 (Wordfence) :

  • Wordfence → Toutes les options → Protection contre la force brute → Bloquer immédiatement les requêtes API REST invalides → Désactiver

Pour 403 (Nginx + règles manquantes) :

nginx

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

Pour tout problème REST :

  1. Désactivez toutes les extensions
  2. Basculez vers Twenty Twenty-Four
  3. Enregistrez les permaliens
  4. Si ça fonctionne, réactivez lentement

Réflexions finales

Les erreurs 404 et 403 de l’API REST sont presque toujours des problèmes de configuration serveur ou d’extensions de sécurité — pas des bugs de WordPress lui-même.

La règle d’or : Commencez par enregistrer les permaliens. C’est simple, rapide et corrige 50% des erreurs 404.

Si cela ne fonctionne pas, désactivez toutes les extensions et basculez vers un thème par défaut. Cela permet d’isoler si le problème vient de votre configuration ou de votre environnement d’hébergement.

Et rappelez-vous : La plupart des erreurs 403 sont des extensions de sécurité qui font leur travail de manière trop agressive. Vérifiez les paramètres de l’API REST de votre extension de sécurité avant de supposer que quelque chose d’autre est cassé.

Ce billet vous a été utile?
Offrez-nous un café!
Tags: