【WordPress】類似したURLからリダイレクトで全く別ページにアクセスされるのを止める
皆さんご機嫌いかがでしょうか。yamashitaです。
本日はWordPressのお節介機能を止める方法を紹介します。
URL自動補完リダイレクトについて
実際の動作例
以下のような親子構成の固定ページがあるとします。(いい例が考えつかずすみません)
- /jp
- /en
- /jp/aaaa
- /en/bbbb
この時/en/bbbb
にアクセスしようと思い、間違えて/jp/bbbb
とURLを入力すると・・・なんと/en/bbbb
にアクセスできるとても便利な機能なんです。
他にも/jp/jp
と入力した場合、ビックリなことに階層を飛び越えて/jp
にアクセスさせてくれます。とても便利と見せかけて存在しないページへのアクセスを勝手に存在してるページに飛ばしちゃいます。
このような例のほかにも、/jp/aa
と入力すると/jp/aaaa
にアクセスします。
どうやら前方一致でリダイレクトしてるようでパスの最後の階層のスラッグで検索をかけてヒットした固定ページに飛ぶようです。
詳しい処理はこちらにあるので是非読んでみてください。
https://core.trac.wordpress.org/browser/tags/5.4/src/wp-includes/canonical.php#L42
自動補完リダイレクトを無効化するには
以下のコードをfunctions.phpに書けば解決します。
今回は打ち間違などで存在しないページへのアクセスを既存のページに飛ばすのが嫌だったので、is_404()
でページが存在しない場合にのみ無効になるようにしました。
function disable_redirect_canonical( $redirect_url )
{
if ( is_404() ) {
return false;
}
}
add_filter("redirect_canonical", "disable_redirect_canonical");
これで変な動作をせずにすみます。
もっといろいろ実装例を書いてみたかったですが、これ以外特に思いつきませんでした。
条件を細かくしたりリダイレクト先を特定のページにしてもそんなに意味はないのかなと思ってます。