web-dev-qa-db-ja.com

wp-json/return 404、しかしwp-json/wp/v2 /は私のnginxサーバーではうまく動きます

www.example.com/wp-json/としてWordPressサイトにアクセスすると、この404エラーが発生しました。

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

しかし、私がwww.example.com/wp-json/wp/v2/のURLを使用する場合、REST apiは正しいjsonオブジェクトを返します。

私のパーマリンクは/%year%/%monthnum%/%postname%/として設定されています、そしてこれは私のnginx設定の一部です:

server {

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

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

    # other location directives related to php, cache, etc.

}

私はインターネットで検索しましたが、ほとんどの問題は誤ったパーマリンク設定と.htaccess(Apache)によって引き起こされているようですが、nginxに関連するケースについてはほとんど言及されていません。何がこれを引き起こすのか、そしてそれをどのように解決するのか、何か考えがありますか?

アップデート

私がcurl -i www.example.com/wp-jsonを実行するならば、これは私が得るものです:

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

最新のアップデート(2017年3月7日)

WordPress 4.7.3のリリースで、このバグは修正されました。回避策unset ($_SERVER['PATH_INFO']);はもう必要ありません。

2
hcheung

https://core.trac.wordpress.org/ticket/39432

症状は非常によく似ており、執筆時点では4.7.3としてリリースされていません。手動でパッチを適用することは私のnginxセットアップに関する問題を修正しました。

2
lkraav

Nginxのみ(Apacheなし)のWordPressブランクインストール4.7.2サイトで同じ問題に遭遇しただけです。

基本の/wp-json/index.php?rest_route=/のURLはrest_no_route 404を示していますが、すべての/wp-json/wp/v2/は問題なく機能しています。

問題は、nginxによって渡されたPATH_INFO変数に関連していることが判明しました。WordPressコアが、それが何かに設定されている場合、空の文字列でさえも、間違ってURLを構築しようとします。

もっと調査が必要ですが、REQUEST_URIでそれらの特定のページに条件を追加することで修正できました。

unset($_SERVER['PATH_INFO']);
1
user113522

私にとっては、パーマリンクを最初のオプション以外の特別なものに更新することが仕事でした。