WordPressのRedirectプラグインを使うと、あるURLから別のURLにリクエストをリダイレクトさせることができます。Webサイトやブログを廃止・統合したりで投稿のURLを変える必要がある場合に便利です。HTTPステータスに301を返すことで、検索エンジンに恒久的な移動であることを示すことができ、SEO的にも有効です。
Redirectプラグインの使い方自体は、他にわかりやすくたくさん紹介されていますので、ググってご覧になっていただいた方がよいです。
リダイレクトの指示は、旧URLから新URLのマッピングを逐次指定してやればいいのですが、投稿数が多いと大変です。URLに規則性がある場合には、旧URLの指定に正規表現を使えば、マッピングをだいぶ簡略化できます。
ブログ主は、こんなURLを旧サイトで持っていました(ドメイン部は省略)。
/category/content1-1.aspx
拡張子を見てのとおり、WordPressサイトのURLではありません。ASP.NET WebフォームによるWebサイトです。ここに来たリクエストを下記のように転送したいとします。
/category/content/1-1/
このページが1個なら、こんな指定を入れていくだけです。ただ、たくさんあって、かつURLに規則性があるなら、正規表現を使いましょう。
ブログ主は最初、こんな感じで指定しました。
/category/content(\d\-\d)\.aspx
\dは数字を表し(この場合1桁)、メタ文字である-(ハイフン)と.(ドット)はエスケープしています。()は転送先URLで参照するためのグルーピングです。ちなみに、正規表現を指定する場合、頭に^(ハット)を付けると良いよとアドバイスされます。自分でサイトの全容を把握していれば不要と思いますが、付けても害はないですね。
ただし、これはうまくヒットしません。なので転送は行われず、404エラーとなります。
試行錯誤の結果、\dは使えない、メタ文字のエスケープも不要という結論に至りました。エスケープがないのでシンプルに見えます。POSIXなどの正規表現とは仕様が異なるようです。
^/category/content([0-9]-[0-9]).aspx$
せっかくなので、行末を示す$も付けています。\dの代わりに[ ]で文字範囲を明示しました。転送後のURLを下記のように指定してやれば、うまく転送できます。
/category/content/$1/
$1も、最初は\1としてしまい、まったく置き換わらずに404エラーとなっていました。
ということで、今では旧サイトへのURLでアクセスがあっても、新しく用意したコンテンツへ転送されるようになり、ムダなナビゲーションをユーザーにさせることがなくなり安心です。
WordPressには便利なプラグインがたくさんあるので、いろいろ活用していきたいです。