wp-json/ returnează 404, dar wp-json/wp/v2/ funcționează corect pe serverul meu nginx
Când accesez site-ul meu WordPress ca www.example.com/wp-json/
primesc această eroare 404.
{"code":"rest_no_route","message":"No route was found matching the URL and request method","data":{"status":404}}
Dar API-ul REST returnează obiectul json corect dacă folosesc URL-ul www.example.com/wp-json/wp/v2/
.
Permalink-ul meu este setat ca /%year%/%monthnum%/%postname%/
, și aici este o parte din setările mele de configurare nginx:
server {
root /var/www/html;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# alte directive location legate de php, cache, etc.
}
Am căutat pe Internet și majoritatea problemelor par să fie cauzate de setarea incorectă a permalink-urilor și .htaccess (Apache), dar rareori se menționează cazul legat de nginx. Aveți vreo idee ce cauzează acest lucru și cum poate fi rezolvat?
Actualizare
Dacă rulez curl -i www.example.com/wp-json
, iată ce primesc:
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 route was found matching the URL and request method","data":{"status":404}}
Ultima Actualizare (7 Mar 2017)
Odată cu lansarea WordPress 4.7.3, acest bug a fost remediat. Soluția temporară unset ($_SERVER['PATH_INFO']);
nu mai este necesară.
Am întâmpinat aceeași problemă pe o instalație WordPress goală, doar cu nginx (fără Apache), versiunea 4.7.2.
URL-urile de bază /wp-json/
și index.php?rest_route=/
afișau eroarea rest_no_route 404
, însă toate rutele /wp-json/wp/v2/
funcționau perfect.
Problema s-a dovedit a fi legată de variabila PATH_INFO
trimisă de nginx, pe care nucleul WordPress încearcă să o folosească pentru a construi URL-ul în mod incorect, chiar dacă este setată la orice valoare, inclusiv un șir gol.
Este nevoie de mai multe investigații, dar am reușit să rezolv prin adăugarea unei condiții pentru aceste pagini specifice folosind REQUEST_URI
, făcând astfel:
unset($_SERVER['PATH_INFO']);

Ah, mulțumesc @user113522, acum înțeleg de ce s-a întâmplat asta. WordPress se bazează pe .htaccess pentru a gestiona redirectarea, dar în cazul Nginx, Nginx nu folosește .htaccess. Când WordPress nu găsește fișierul .htaccess, apelează la PATH_INFO care adaugă un index.php suplimentar în URL. Soluția ta de a adăuga unset($_SERVER['PATH_INFO']);
funcționează, dar cred că e mai bine să configurezi o redirectare la nivel de directivă location în Nginx. O să testez când voi avea timp și voi posta aici rezultatele.

Ar putea fi vorba despre https://core.trac.wordpress.org/ticket/39432
Simptomele par foarte asemănătoare și la momentul scrierii nu a fost lansată versiunea 4.7.3. Aplicarea patch-ului manual a rezolvat problema pe configurația mea nginx.

Mulțumesc pentru link. Aceasta a rezolvat problema, dar din moment ce implică modificarea codului în /wp-includes, aș prefera să nu o schimb în acest fel. Momentan sunt pe versiunea 4.7.2, sper ca această problemă va fi remediată în versiunea viitoare 4.7.3. Între timp, voi urma instrucțiunile lui @user113522 prin anularea variabilei $_SERVER['PATH_INFO']
.

A funcționat pentru mine cu configurația propusă de nginx de la WordPress. Adaugă asta în nginx.conf
location /wp-json/ { # Rezolvă problema de 404 din WP Gutenberg
try_files $uri $uri/ /index.php;
}
și schimbă setările 'Permalinks' la 'Nume postare'
aceasta ar trebui să rezolve problema cu /wp-json
.
https://wordpress.org/support/article/nginx/
Am configurat un site de rețea cu instrucțiunile date și totul a funcționat bine. Merită încercat!
De asemenea, site-urile https trebuie să aibă permalink-uri corecte, verifică și asta!
