API REST de WordPress no funciona - Solución a error 404

24 oct 2019, 15:14:46
Vistas: 17.8K
Votos: 5

WP 5.2.4

/wp-json/wp/v2/

Devuelve error 404.

Actualicé los enlaces permanentes, tengo un .htaccess funcional en Apache y no uso "enlaces permanentes simples" y aún así no funciona. Mi Apache y su configuración parecen correctos y todo funciona excepto /wp-json.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

¿Cómo solucionar este frustrante error de WP? ¿Por qué WordPress no mejora esto, cuando la gente tiene problemas con esto a diario?

Mis rutas de WP se ven así (recortado):

array (
  '^wc-auth/v([1]{1})/(.*)?' => 'index.php?wc-auth-version=$matches[1]&wc-auth-route=$matches[2]',
  '^wc-api/v([1-3]{1})/?$' => 'index.php?wc-api-version=$matches[1]&wc-api-route=/',
  '^wc-api/v([1-3]{1})(.*)?' => 'index.php?wc-api-version=$matches[1]&wc-api-route=$matches[2]',
  'sitemap_index\\.xml$' => 'index.php?sitemap=1',
  '([^/]+?)-sitemap([0-9]+)?\\.xml$' => 'index.php?sitemap=$matches[1]&sitemap_n=$matches[2]',
  '([a-z]+)?-?sitemap\\.xsl$' => 'index.php?yoast-sitemap-xsl=$matches[1]',
  'shop-4/?$' => 'index.php?post_type=product',
  'shop-4/feed/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=product&feed=$matches[1]',
  'shop-4/(feed|rdf|rss|rss2|atom)/?$' => 'index.php?post_type=product&feed=$matches[1]',
  'shop-4/page/([0-9]{1,})/?$' => 'index.php?post_type=product&paged=$matches[1]',
  '^wp-json/?$' => 'index.php?rest_route=/',
  '^wp-json/(.*)?' => 'index.php?rest_route=/$matches[1]',

....

Como pueden ver, las reglas wp-json deberían funcionar ya que coinciden con una URL como

/wp-json/wp/v2/posts/6307

He verificado qué rutas REST están disponibles (usando el plugin "Rest Manager", simple y limpio):

/wp/v2/posts/
/wp/v2/posts/(?P<id>[\d]+)

Cuando accedo a las URLs:

/index.php?rest_route=wp/v2/posts/6307
/index.php?rest_route=/wp/v2/posts/6307
/index.php?rest_route=wp/v2/posts/
/index.php?rest_route=/wp/v2/posts/

Obtengo con todas:

(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}}

Dicen que una lista de endpoints está disponible a través de GET /wp-json/ pero esta página también devuelve 404.

El comportamiento es exactamente el mismo para rutas que sé que usan verbos GET:

404 /wp-json/wp/v2/block-renderer/woocommerce/
4
Comentarios

Algunos plugins tienen una opción para desactivar la API REST. Asegúrate de que todos los plugins estén desactivados e inténtalo de nuevo.

idpokute idpokute
24 oct 2019 17:27:41

No tengo muchos plugins, básicamente WooCommerce y WPML. La API REST está "activa", el enrutamiento simplemente tiene errores.

Daniel W. Daniel W.
24 oct 2019 17:29:08

La razón por la que sugiero desactivar todos los plugins es para determinar si es un problema de software como los plugins o del servidor como un problema en el .htaccess.

idpokute idpokute
24 oct 2019 17:31:52

@idpokute Descubrí que el plugin "WPML" está causando esto. ¿Alguna idea sobre cómo podría depurar esto más a fondo?

Daniel W. Daniel W.
27 oct 2019 17:14:42
Todas las respuestas a la pregunta 1
1

Primero debes verificar si la API REST de WordPress está habilitada o no.

La mejor forma de verificar es visitar esta URL: https://yoursite.com/wp-json. Si ves una respuesta en formato JSON, la API REST está habilitada. Si muestra una página de error o redirige a la página principal, la API REST no está habilitada. En ese caso, primero debemos habilitarla.

En este caso, debes habilitar los Enlaces permanentes

  1. Visita la página de administración de tu sitio (Visita https://yoursite.com/wp-json)
  2. Ajustes > Enlaces permanentes (visita https://yoursite.com/wp-admin/options-permalink.php)
  3. Asegúrate de que "Simple" no esté seleccionado
  4. Elige "Nombre de entrada" (es la mejor opción)
  5. Luego haz clic en Guardar cambios. Esto reescribirá/reparará tu archivo .htaccess

Más información

14 may 2021 10:07:35
Comentarios

Buen comienzo, pero no has mencionado qué hacer si ves una respuesta JSON (es decir, si la API está funcionando). Comenzaste con "si está habilitada o no" pero solo describiste el escenario de "no". Con gusto cambiaré mi voto negativo a positivo si puedes completar la respuesta :)

Cush Cush
5 jul 2021 19:07:53