【WordPress】類似したURLからリダイレクトで全く別ページにアクセスされるのを止める

【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");

これで変な動作をせずにすみます。
もっといろいろ実装例を書いてみたかったですが、これ以外特に思いつきませんでした。
条件を細かくしたりリダイレクト先を特定のページにしてもそんなに意味はないのかなと思ってます。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ