WordPressの前方一致リダイレクト(転送)を止めて404ページに飛ばす方法

WordPressには記事URLの前方一致で記事が見つかれば、ご親切(?)にリダイレクトする機能があるというのを初めて知ったので覚書として残しておきます。

WordPress運営サイトで発生した事象

WordPressで運営しているサイトに以下の2つの記事がありました。(URLは例)

A:http://otaku-blog.net/wordpress
B:http://otaku-blog.net/wordpress-plugin

Aの記事を非公開にした後、AのURLでアクセスするとBの記事にリダイレクトされるという事象です。

WordPressにデフォルトで備わっている機能のようで、前方一致で記事を探してリダイレクト(転送)してしまいます。この例だと、~/wordpressの記事が見つからないので、前方一致で検索すると該当する~/wordpress-pluginの記事へリダイレクトされてしまいます。

不要なリダイレクトを止める方法

この機能はfunctions.phpに以下の記述をすることで止めることができます。

function remove_redirect_guess_404_permalink($redirect_url, $requested_url) {
  if(is_404()) {
    return false;
  }
  return $redirect_url;
}
add_filter('redirect_canonical', 'remove_redirect_guess_404_permalink', 10, 2);

URLを補完してリダイレクトするような機能は、WordPress2.3から追加された「カノニカルURL」の機能で行われているそうです。

記述したコードは、アクセスされたページが存在しないならfalseを返却して、カノニカルURLの機能を無効化しています。補完が行われないので、そのままURLにアクセスしてページが見つからないので、404.phpが呼び出されてnot foundページが表示されます。

なお、404.phpを作成しておかないと、記事が見つからない場合はトップページに飛ばされるのでご注意ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です