web-dev-qa-db-fra.com

wp-json/return 404, mais wp-json/wp/v2/fonctionne bien sur mon serveur nginx

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.

2
hcheung

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.

2
lkraav

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']);
1
user113522

Pour moi, mettre à jour les permaliens vers quelque chose de spécial par rapport à la première option.

1