先日、当サイトのリニューアルを行った際に本番サーバーへのアップをしたら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' );