WordPress API v2 でパラメータが無視される(AWS)

  • WordPress

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 やプロキシサーバーなどを使っているなら設定を確認した方がいいのかも。