WordPress REST API v2 では/wp-json/wp/v2/*
のエンドポイントにGETリクエストを送ることで情報を取得できます。
症状
/wp-json/wp/v2/posts?per_page=2
にGETリクエストを送れば、投稿タイプ「post」の記事を2つ取得できます。
が、今回はこうしたGETパラメータを指定しても無視されてしまい、常に/wp-json/wp/v2/posts
と同じ記事が取得される現象がおきました。
原因
apache なので httpd のログがどうなってるか確認
sudo tail /var/log/httpd/access_log
するとGETパラメータ付きでアクセスしたはずなのに、パラメータの霊圧が…消えた…?
.... "GET /wp-json/wp/v2/posts HTTP/1.1" .....
このサーバーは CloudFront をかませており、どうやらそっち側でGETパラメータが削除されているようです。大元のWebサーバー側でGETパラメータが認識できなければ、何を送っても/wp-json/wp/v2/posts
の情報が返ってきてしまう…
修正
AWS の CloudFront で確認してみると Behaviors タブにある Default(*) 行の Forwarded Query Strings の設定が No になっていました。これだと他の設定にマッチしないものは、全てGETパラメータが無視されてしまいます。
なので、/wp-json/wp/v2/*
のときは Forwarded Query Strings を Yes に設定し、GETパラメータをWebサーバーに送信してもらえるようになりました。
あまりサーバー方面の設定に明るくありませんが、CloudFront に限らず CloudFlare やプロキシサーバーなどを使っているなら設定を確認した方がいいのかも。