他人のWordpressサイトで、固定ページのslugを変更してもなぜか元のslugにリダイレクトされるという現象に出会い、小一時間悩んだので解決までの手順をまとめておきます。
リダイレクトの問題現象
固定ページのslugをtestarea⇒testに変更したが、testと入力するとtestareaにリダイレクトされて404になってしまう。
よくあるリダイレクトの問題
①WordPressで削除した記事URLにアクセスすると勝手に他の記事にリダイレクトされる
原因
WordPressの自動補完リダイレクト機能というやつです。
slugが似ていると勝手に他のslugにリダイレクトしてくれるらしい。
止め方
//-----------------------------------------------------
// 【自動リダイレクト無効】
//-----------------------------------------------------
function disable_redirect_canonical( $redirect_url ) {
if( is_404() ) {
return false;
}
return $redirect_url;
}
add_filter( 'redirect_canonical', 'disable_redirect_canonical' );
削除(存在しない)した記事から存在する記事にリダイレクトする機能なので、今回の現象とは関係が無い。
なぜなら、存在するページのslugを指定してるのに、存在しないslugにリダイレクトされるから。
②slug変更後も変更前のslugからリダイレクトされる
原因
WordPressはslugを変更すると変更前のslugを覚えており、自動的にリダイレクトするようになっています。
WordPressのデータベースのwp_postmetaテーブルに、meta_key値が_wp_old_slugのレコードがある。meta_valueの値を見て不要レコードを消せばそのリダイレクトが止まります。
止め方
//すべての古いパーマリンクからのリダイレクト処理を停止
remove_action( 'template_redirect', 'wp_old_slug_redirect' );
こちらも、古いslugから新しいslugにリダイレクトする機能なので、今回の現象とは関係が無い。
なぜなら、新しいページのslugを指定してるのに、古いslugにリダイレクトされるから。
③.htaccessやプラグインでリダイレクトの指定をしている
wordpressとは関係なく、自分で.htaccessやリダイレクトプラグインでリダイレクトしているというものです。
自分でやっていればすぐにわかりますが、他人のサイトだとなかなか気が付けません。
今回のリダイレクトが発生した原因
リダイレクションプラグインにリダイレクト設定があった。
間抜けな話ですが、リダイレクションプラグインの転送設定にそのまんまの設定が書かれていました。
Redirectionプラグインは注意が必要
Redirectionプラグインはリダイレクト設定を自分で設定していなくても設定パネルの『サイト』設定として、以下の2つを設定する箇所があります。
- http⇒httpsへのリダイレクト
- wwwありなしのリダイレクト

Redirectionプラグインを有効化した時点では上記は自動的に設定されます。しかし、プラグインを有効化した後で、Wordpress設定のURLでwww有り無しを変更してしまうと、Wordpress側の設定とRedirectionプラグインの設定が不一致になり、リダイレクトループが発生します。
そうなるとREST APIが動作しなくなり、Redirectionプラグインが動作しなくなります。
この部分は、自分で設定しているならまだしも、設定した覚えが無いとなかなか気が付けないと思います。
まとめ
URLを変更して変更後のURLから変更前にリダイレクトされるという怪現象は前任者が設定していたリダイレクトが原因でした。
.htaccessだけじゃなく、リダイレクションプラグインの設定も確認した方がよいですね、という話でした。