wp-json/ restituisce 404, ma wp-json/wp/v2/ funziona correttamente sul mio server nginx
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.
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']);

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.

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.

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

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!
