【WordPress】URLの自動補完リダイレクトが生じたときの対処方法

先日、当サイトのリニューアルを行った際に本番サーバーへのアップをしたらWordPressのURLの自動補完により投稿ページへのアクセスができなくなった。ユーザーが絶妙な打ち間違えをしたときなどでは便利な機能ではあるが、ローカルでの仮装環境では問題なかったのが、本番へのアップで突然おかしなことになり一瞬戸惑ったので備忘録として書き残しておこうと思う。

WordPress自体はローカル・本番サーバー共に同一バージョンのものをインストールしているが、それぞれのインストール方法が異なる。ローカルでは単純に公式のダウンロードページより最新バーンジョンを入手し、解凍して使用。本番サーバーではWordPress側の機能を用いて最新バージョンにアップデートした。単純にデータベースの設定を都度行う手間を短縮することが目的である。

投稿ページや固定ページといった記事や投稿(=DB上の情報)自体は継続して使用し、表面のデザインやデザインの構成のみの変更をしたためにテンプレートファイルの入れ替えがメインのリニューアルのため、(1)All-in-One WP Migrationというプラグインにてエクスポートしたデータをローカル環境に移行→(2)ローカル環境上でカスタマイズ→(3)再びAll-in-One WP Migrationにてエクスポートして、本番側にインポート&FTPでテンプレートファイルだけをアップという3ステップの手順にて行ったがどうも動作がおかしい。固定ページへのリンクは問題ないのだが、投稿ページへのリンクがリダイレクトされてしまいインデックスページが表示されてしまうという自体となり、深夜に作業していたということもあり一瞬戸惑ってしまった。

画像はすでに解決済みのキャプチャではあるが、カーソルを乗せたときのURL(=リンク元)自体はきちんと指定されているのにカテゴリトップに飛んでしまうという事象だったため、あー自動補完されてるんだなとわかったが、このときの解決策としては主に2つ方法がある。

 

(1)パーマリンク設定を変更する

(2)URLの自動補完リダイレクトを無効にする

 

それぞれメリット・デメリットがあるが(1)についてはサイトによっては適用しない可能性がある。例えば投稿ページへの被リンクの多い場合はパーマリンクを変更することでURLが変化してしまうため、さらに301リダイレクトなどの処理が必要になるしあまり現実的ではないし、そうなったときに何より面倒だ。基本的には固定ページメインの構成でありあまり投稿数の多くない状態でのリニューアルまたは新規ページとして制作しているときには何より手っ取り早くて良いだろう。(2)についてはfunction.phpに次のコードを書き加えることでURLの自動補完リダイレクトを無効にし、誤ったURLにアクセスした際には404ページへリダイレクトさせることができる。

if( is_404() ) {
    return false;
  }
  return $redirect_url;
}
add_filter( 'redirect_canonical', 'disable_redirect_canonical' );
当たり前だが、自動補完がされなくなるので微妙なURLの打ち間違えをしてしまった場合でも容赦無く404に飛ばされるのはデメリットである。また、状況によっては(どんな状況?)個別の条件を書き加えることもできるがその場合も基本的にはfunction.phpへの記述となる。
今回、ローカル側にインストールしたてホヤホヤのWordPressではそもそも、どういうわけか?自動補完がなされないような記述になっていたのだが、自動インストールバージョンでは自動補完がされる記述となっていた。もともとパーマリンクの設定ではカスタム設定でドメイン/カテゴリ/番号となる設定にしていたが、それでは短すぎて自動補完に引っかかっていたようなので、ドメイン/カテゴリ/年yyyy/番号と、ひとつ階層が増えるような見た目のURL(実際には動的なのであまり階層の概念は無い)にしてみたらすんなり改善したが、今後同じようにリニューアル作業を行うときにはfunction.php内の記述は事前にチェックして、一瞬でも戸惑わないようにしたい。
タイトルとURLをコピーしました