wp-json/ devuelve 404, pero wp-json/wp/v2/ funciona bien en mi servidor nginx

24 ene 2017, 07:40:10
Vistas: 35.4K
Votos: 3

Cuando accedo a mi sitio WordPress como www.example.com/wp-json/ obtengo este error 404.

`{"code":"rest_no_route","message":"No se encontró ninguna ruta que coincida con la URL y el método de solicitud","data":{"status":404}}`

Pero la API REST devuelve el objeto json correcto si uso la URL www.example.com/wp-json/wp/v2/.

Mi permalink está configurado como /%year%/%monthnum%/%postname%/, y aquí está parte de mi configuración de nginx:

server {

    root /var/www/html;
    index index.php index.html index.htm;

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

    # otras directivas de ubicación relacionadas con php, caché, etc.

}

Busqué en Internet y la mayoría de los problemas parecen ser causados por una configuración incorrecta de los enlaces permanentes y .htaccess (Apache), pero rara vez se menciona el caso relacionado con nginx. ¿Alguna idea de qué causa esto y cómo solucionarlo?

Actualización

Si ejecuto curl -i www.example.com/wp-json, esto es lo que obtengo:

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 se encontró ninguna ruta que coincida con la URL y el método de solicitud","data":{"status":404}}

Última actualización (7 Mar 2017)

Con el lanzamiento de WordPress 4.7.3, este error ha sido corregido. Ya no se necesita la solución temporal unset ($_SERVER['PATH_INFO']);.

7
Comentarios

¿Qué esperas encontrar en wp-json/?

Nathan Powell Nathan Powell
24 ene 2017 08:42:12

¿Estás usando un plugin para acceder a la API?

Nathan Powell Nathan Powell
24 ene 2017 08:45:59

Al acceder a wp-json/ esperaba el mismo resultado que en wp-json/wp/v2, este era el comportamiento correcto en mi otro servidor con Apache. No, no tengo un plugin para REST. Mi WordPress es la versión 4.7, pensé que ya no se requería un plugin para la API REST.

hcheung hcheung
24 ene 2017 09:51:09

Ya no es necesario tener un plugin, pero parece que los endpoints principales son la versión v2. ¿Quizás no se trata de Apache vs nginx, sino que usaste un plugin anteriormente?

Nathan Powell Nathan Powell
24 ene 2017 10:02:14

No, nunca usé un plugin, como mencioné en mi mensaje anterior que con la misma configuración de WordPress funcionaba sin plugin en un servidor Apache.

hcheung hcheung
24 ene 2017 13:26:19

¿Pudiste resolver esto? Estoy experimentando el mismo problema

Snowball Snowball
13 feb 2017 08:36:14

No, todavía no he recibido ningún comentario perspicaz.

hcheung hcheung
13 feb 2017 14:10:52
Mostrar los 2 comentarios restantes
Todas las respuestas a la pregunta 4
1

Acabo de encontrarme con el mismo problema en una instalación limpia de WordPress 4.7.2 solo con nginx (sin Apache).

Las URL base /wp-json/ y index.php?rest_route=/ mostraban rest_no_route 404, pero todas las rutas /wp-json/wp/v2/ funcionaban correctamente.

El problema resultó estar relacionado con la variable PATH_INFO que pasa nginx y que WordPress core intenta usar incorrectamente para construir la URL, incluso si está configurada como una cadena vacía.

Requiere más investigación, pero logré solucionarlo agregando una condición para esas páginas específicas mediante REQUEST_URI, haciendo esto:

unset($_SERVER['PATH_INFO']);
17 feb 2017 01:18:35
Comentarios

Ah, gracias @user113522, ahora entiendo por qué sucedió esto. WordPress realmente depende de .htaccess para manejar las redirecciones, pero en el caso de Nginx, Nginx no usa .htaccess. Cuando WordPress no puede encontrar el .htaccess, recurre a usar PATH_INFO lo que agrega un index.php adicional en la URL. Tu solución de agregar unset($_SERVER['PATH_INFO']); funciona, pero creo que es mejor configurar una redirección en la directiva de ubicación de nginx. Lo probaré cuando tenga tiempo y lo publicaré aquí más tarde.

hcheung hcheung
22 feb 2017 08:19:52
2

¿Podría tratarse de https://core.trac.wordpress.org/ticket/39432?

Los síntomas parecen muy similares y al momento de escribir esto no se ha lanzado como parte de la versión 4.7.3. Aplicar el parche manualmente resolvió el problema en mi configuración de nginx.

20 feb 2017 21:58:17
Comentarios

Gracias por el enlace. Esto solucionó el problema, pero como implica modificar el código en /wp-includes, prefiero no cambiarlo de esta manera. Actualmente estoy en la versión 4.7.2, espero que esto se solucione en la próxima versión 4.7.3. Mientras tanto, seguiré las instrucciones de @user113522 eliminando $_SERVER['PATH_INFO'].

hcheung hcheung
22 feb 2017 16:59:32

Modificar el núcleo específicamente para este parche no hace mucha diferencia, ya que la actualización que sobrescribe todo contendrá lo mismo.

lkraav lkraav
22 feb 2017 20:30:45
0

Para mí, actualizar los enlaces permanentes a algo más especial que la primera opción solucionó el problema.

30 may 2017 13:16:41
0

Funcionó para mí con la configuración propuesta de nginx de WordPress.

Añade esto a tu nginx.conf:

location /wp-json/ { # Resuelve el problema 404 de WP Gutenberg
  try_files $uri $uri/ /index.php;
}

y cambia la configuración de 'Enlaces permanentes' a 'Nombre de entrada'.

Esto debería resolver el problema con /wp-json.

https://wordpress.org/support/article/nginx/

Configuré un sitio de red con las instrucciones proporcionadas y todo pareció funcionar bien. ¡Vale la pena intentarlo!

Además, los sitios HTTPS deben tener los enlaces permanentes correctos, ¡asegúrate de comprobarlo también!

5 dic 2020 13:55:22