wp-json/ restituisce 404, ma wp-json/wp/v2/ funziona correttamente sul mio server nginx

24 gen 2017, 07:40:10
Visualizzazioni: 35.4K
Voti: 3

Quando accedo al mio sito WordPress come www.example.com/wp-json/ ottengo questo errore 404.

{"code":"rest_no_route","message":"Non è stato trovato alcun percorso corrispondente all'URL e al metodo di richiesta","data":{"status":404}}

Ma la REST API restituisce l'oggetto json corretto se uso l'URL www.example.com/wp-json/wp/v2/.

Il mio permalink è impostato come /%year%/%monthnum%/%postname%/, ed ecco parte delle mie impostazioni di configurazione nginx:

server {

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

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

    # altre direttive di location relative a php, cache, ecc.

}

Ho cercato su Internet e la maggior parte dei problemi sembra essere causata da impostazioni errate dei permalink e .htaccess (Apache), ma raramente si parla del caso relativo a nginx. Qualche idea su cosa causa questo problema e come risolverlo?

Aggiornamento

Se eseguo curl -i www.example.com/wp-json, questo è ciò che ottengo:

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":"Non è stato trovato alcun percorso corrispondente all'URL e al metodo di richiesta","data":{"status":404}}

Ultimo Aggiornamento (7 Mar 2017)

Con il rilascio di WordPress 4.7.3, questo bug è stato risolto. Il workaround unset ($_SERVER['PATH_INFO']); non è più necessario.

7
Commenti

Cosa ti aspetti di trovare su wp-json/?

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

Stai utilizzando un plugin per accedere all'API?

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

Quando accedo a wp-json/ mi aspettavo lo stesso risultato che ottengo con wp-json/wp/v2, questo era il comportamento corretto sul mio altro server che utilizza Apache. No, non ho un plugin per il REST. La mia versione di WordPress è la 4.7, pensavo che non fosse più necessario un plugin per l'API REST.

hcheung hcheung
24 gen 2017 09:51:09

Non è più necessario avere un plugin, ma sembra che gli endpoint principali siano nella versione v2. Forse non è una questione di Apache vs nginx, ma hai usato un plugin in precedenza?

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

No, non ho mai usato un plugin, come menzionato nel mio messaggio precedente che con le stesse impostazioni di WordPress su un server Apache funziona senza plugin.

hcheung hcheung
24 gen 2017 13:26:19

Sei riuscito a risolvere? Sto riscontrando lo stesso problema

Snowball Snowball
13 feb 2017 08:36:14

No, non ho ancora ricevuto alcun commento significativo.

hcheung hcheung
13 feb 2017 14:10:52
Mostra i restanti 2 commenti
Tutte le risposte alla domanda 4
1

Mi sono appena imbattuto nello stesso problema su un'installazione WordPress 4.7.2 solo nginx (senza Apache).

Gli URL base /wp-json/ e index.php?rest_route=/ mostravano rest_no_route 404, ma tutti gli /wp-json/wp/v2/ funzionavano perfettamente.

Il problema era legato alla variabile PATH_INFO passata da nginx che il core di WordPress tenta di utilizzare in modo errato per costruire l'URL, se è impostata su qualsiasi valore, anche una stringa vuota.

Serve ulteriore analisi, ma sono riuscito a risolverlo aggiungendo una condizione per quelle pagine specifiche tramite REQUEST_URI facendo così:

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

Ah, grazie @user113522, ora capisco perché è successo. WordPress si affida davvero a .htaccess per gestire il reindirizzamento, ma nel caso di Nginx, Nginx non utilizza .htaccess. Quando WordPress non riesce a trovare il file .htaccess, ripiega sull'uso di PATH_INFO che aggiunge un index.php extra nell'URL. La tua soluzione di aggiungere unset($_SERVER['PATH_INFO']); funziona, ma penso sia meglio configurare un reindirizzamento direttamente nella direttiva location di nginx. Lo testerò quando avrò tempo e lo posterò qui più tardi.

hcheung hcheung
22 feb 2017 08:19:52
2

Potrebbe essere correlato a https://core.trac.wordpress.org/ticket/39432

I sintomi sembrano molto simili e al momento della scrittura non era ancora stato rilasciato come fix nella versione 4.7.3. Applicando manualmente la patch ho risolto il problema sul mio setup con nginx.

20 feb 2017 21:58:17
Commenti

Grazie per il link. Questo ha risolto il problema, ma dato che implica la modifica del codice in /wp-includes, preferisco non cambiarlo in questo modo. Attualmente sono sulla versione 4.7.2, spero che questo verrà risolto nel prossimo rilascio 4.7.3. Nel frattempo, seguirò l'istruzione di @user113522 rimuovendo $_SERVER['PATH_INFO'].

hcheung hcheung
22 feb 2017 16:59:32

Modificare il core specificatamente per questa patch non fa realmente differenza, dato che l'aggiornamento sovrascriverà tutto con lo stesso contenuto.

lkraav lkraav
22 feb 2017 20:30:45
0

Per me, aggiornare i permalink a qualcosa di più specifico rispetto alla prima opzione ha funzionato.

30 mag 2017 13:16:41
0

Ha funzionato per me con la configurazione nginx proposta da WordPress. Aggiungi questo al tuo nginx.conf

location /wp-json/ { # Risolve il problema del 404 in WP Gutenberg
  try_files $uri $uri/ /index.php;
} 

e modifica le impostazioni dei 'Permalink' in 'Nome articolo'

questo dovrebbe risolvere il problema con /wp-json. https://wordpress.org/support/article/nginx/

Ho configurato un sito multisito con le istruzioni fornite e tutto sembrava funzionare bene. Vale la pena provarlo!

Inoltre, i siti https devono avere i permalink corretti, assicurati di verificare anche questo!

5 dic 2020 13:55:22