LoginSignup
4
3

More than 5 years have passed since last update.

[WordPress] マルチサイト設定で JSON REST API へのリクエストがリダイレクトループしてしまう

Last updated at Posted at 2017-12-11

発端は、長らくバージョンアップを放置されていたサブディレクトリ型マルチサイト設定の WordPress をバージョンアップして、Contact Form 7 もバージョンアップしたら動かなくなったという問い合わせから。
Contact Form 7 Ver.4.8 からは、Ajax フォーム送信時に WordPress REST API を使用するようになったので、それが原因で動作しなくなっていたのでした。
私のサイトでは REST API が無効化されています。Contact Form 7 を使うことはできますか

ただ、このサイトでは JSON REST API を無効にするようなプラグインとか入れていたわけではないのですが、/wp-json/contact-form-7/v1/contact-forms/4/feedback へのリクエストが 500 (internal server error) を返してしまい、送信できないような状態。
Apache のログ見ると、どうやらリダイレクトループが発生しているようです。

[Fri Dec 08 21:05:41 2017] [error] [client xxx.xxx.xxx.xxx] Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace., referer: http://example.com/hoge/contact/

ってことで、codex を確認。htaccess
はい、もう答えが書いてありましたね。
WordPress マルチサイト版では、JSON REST API 導入前後で .htaccess の記述方法が変わります。

3.5_and_up
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

肝は RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
以前は、これ RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-.*) $2 [L] だったはず。
古いバージョン用の .htaccess だと、/{子サイト}/wp-json/* へのリクエストがリダイレクトループしちゃうんです。

怪しげな2次情報とか調べずにまずは codex やプラグインのサポートサイトを調べましょうというお話でした。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3