WordPressの投稿リダイレクトで正規表現を使う

WordPressRedirectプラグインを使うと、ある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には便利なプラグインがたくさんあるので、いろいろ活用していきたいです。

コメント