Lorsque j’accède à mon site WordPress en tant que www.example.com/wp-json/
, j’ai eu cette erreur 404.
`{"code":"rest_no_route","message":"No route was found matching the URL and request method","data":{"status":404}}`
Mais le REST api retourne le bon objet json si j'utilise l'url de www.example.com/wp-json/wp/v2/
.
Mon lien permanent est configuré en tant que /%year%/%monthnum%/%postname%/
, et voici une partie des paramètres de configuration de mon nginx:
server {
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# other location directives related to php, cache, etc.
}
J'ai cherché sur Internet et la plupart des problèmes semblent être dus à un paramètre de permalien incorrect et à .htaccess (Apache), mais rarement mentionnés à propos du cas lié à nginx. Une idée de ce qui cause cela et comment le résoudre?
Mettre à jour
Si je lance curl -i www.example.com/wp-json
, voici ce que je reçois:
HTTP/1.1 404 Not Found
Server: nginx
Date: Sun, 29 Jan 2017 11:58:21 GMT
Content-Type: application/json; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Robots-Tag: noindex
Link: <https://example.com/wp-json/>; rel="https://api.w.org/"
X-Content-Type-Options: nosniff
Access-Control-Expose-Headers: X-WP-Total, X-WP-TotalPages
Access-Control-Allow-Headers: Authorization, Content-Type
{"code":"rest_no_route","message":"No route was found matching the URL and request method","data":{"status":404}}
Dernière mise à jour (7 mars 2017)
Avec la sortie de WordPress 4.7.3, ce bug a été corrigé. La solution de contournement unset ($_SERVER['PATH_INFO']);
n'est plus nécessaire.
Pourrait-il s'agir de https://core.trac.wordpress.org/ticket/39432
Les symptômes semblent très similaires et, au moment de la rédaction de ce document, ils n’étaient pas encore publiés en tant que 4.7.3. L'application du correctif manuellement a corrigé le problème sur la configuration de nginx.
Nous venons de rencontrer le même problème sur un site 4.7.2 vierge d’installation vierge de WordPress nginx (sans Apache).
Les URL de base /wp-json/
& index.php?rest_route=/
affichent rest_no_route 404
, mais toutes les /wp-json/wp/v2/
fonctionnent parfaitement.
Il s’est avéré que le problème était lié à la variable PATH_INFO
transmise par nginx que le noyau WordPress tente de créer de manière incorrecte à l’URL, même s’il est défini sur une chaîne vide.
A besoin de plus d'investigation, mais j'ai pu résoudre ce problème en ajoutant une condition sur ces pages spécifiques via REQUEST_URI
en le faisant pour elles:
unset($_SERVER['PATH_INFO']);
Pour moi, mettre à jour les permaliens vers quelque chose de spécial par rapport à la première option.