API REST di WP non funzionante - Risoluzione errori 404

24 ott 2019, 15:14:46
Visualizzazioni: 17.8K
Voti: 5

WP 5.2.4

/wp-json/wp/v2/

Restituisce errore 404.

Ho aggiornato i permalink, ho un .htaccess funzionante su Apache e non uso "permalink semplici", ma ancora non funziona. La configurazione Apache sembra corretta e tutto funziona tranne /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>

Come risolvere questo frustrante bug di WP? Perché WordPress non migliora questa situazione, quando le persone hanno problemi quotidianamente?

Le mie route WP sono così (ridotte):

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]',

....

Come vedi, le regole wp-json dovrebbero funzionare poiché corrispondono a un URL come

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

Ho verificato quali route REST sono disponibili (usando il plugin "Rest Manager", chiaro e pulito):

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

Quando accedo agli URL:

/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/

Ottengo con tutti:

(404)
{"code":"rest_no_route","message":"No route was found matching the URL and request method","data":{"status":404}}

Dicono che un elenco di endpoint è disponibile tramite GET /wp-json/ ma anche questa pagina restituisce 404.

Il comportamento è esattamente lo stesso per route che so usano verbi GET:

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

Alcuni plugin hanno un'opzione per disabilitare l'API REST. Assicurati che tutti i plugin siano disabilitati e riprova.

idpokute idpokute
24 ott 2019 17:27:41

Non ho molti plugin, fondamentalmente WooCommerce e WPML. L'API REST è "attiva", è solo il routing che non funziona correttamente.

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

Il motivo per cui suggerisco di disabilitare tutti i plugin è per capire se si tratta di un problema software come i plugin o del server come un problema di .htaccess.

idpokute idpokute
24 ott 2019 17:31:52

@idpokute Ho scoperto che il plugin "WPML" è la causa di questo problema. Hai qualche idea su come potrei continuare il debug?

Daniel W. Daniel W.
27 ott 2019 17:14:42
Tutte le risposte alla domanda 1
1

Per prima cosa devi verificare se l'API REST di WordPress è abilitata o meno

Il modo migliore per verificarlo è visitare questo URL: https://yoursite.com/wp-json. Se vedi una risposta in formato JSON, l'API REST è abilitata. Se viene visualizzata una pagina di errore o ti reindirizza alla home page, l'API REST non è abilitata. In questo caso, dovremo abilitarla prima.

In questa situazione, devi abilitare i Permalink

  1. Visita la pagina di amministrazione del tuo sito (Vai su https://yoursite.com/wp-json)
  2. Impostazioni > Permalink (visita https://yoursite.com/wp-admin/options-permalink.php)
  3. Assicurati che l'opzione "Normale" non sia selezionata
  4. Scegli "Nome articolo" (è l'opzione migliore)
  5. Quindi clicca su Salva modifiche. Questo riscriverà/riparerà il tuo file .htaccess

Maggiori informazioni

14 mag 2021 10:07:35
Commenti

Buon inizio, ma non hai menzionato cosa fare se vedi una risposta JSON (cioè se l'API funziona). Hai iniziato con "se abilitata o meno" ma hai descritto solo lo scenario "non abilitato". Sarò felice di trasformare il mio voto negativo in positivo se riesci a completare la risposta :)

Cush Cush
5 lug 2021 19:07:53