先日、WordPressサイトを別ドメインに引っ越すという仕事をしたのですが、前のドメインから全記事リダイレクトに加え、パーマリンク構造も変える必要がありました。
WordPressでリダイレクトといえばRedirectionという便利なプラグインがあるのですが、ググってみるとURLを1つずつ登録してリダイレクトを設定する方法しか説明していないサイトばかり。
数ページぐらいのサイトの引っ越しならそれでもよいですが、何百記事もあるサイトを引っ越しする場合、とてもじゃないけどやってられません。
そういうときに便利なのが正規表現ですが、その方法を説明してくれた記事を見つけられなかったので自力解決しました。その時の覚え書きです。
今回のリダイレクトでやりたいこと
やりたいことは「リダイレクト元のページにアクセスした時にリダイレクト先の同じ内容のページに飛ばす」という動作です。
リダイレクト元とリダイレクト先のURL構造が全く同じ場合はドメインの部分のみが変わればOK。これは後ほどご紹介しますが非常にシンプルな表現で対応できます。
一方、今回私が依頼を受けたケースは、下記のように日付を含むパーマリンクから含まないパーマリンクへのリダイレクトでした。
https://リダイレクト元ドメイン/2010/4/5/投稿名
↓https://リダイレクト先ドメイン/投稿名
「なんで今どきパーマリンクが日付と投稿名なのよ…」
と突っ込みたいところですが、これで運用していたのだから仕方ありません。このパーマリンクを引っ越しに合わせてスッキリさせたいという気持ちも分かります。このリダイレクトで行う処理は次の2つ。
- リダイレクト元のURLから投稿名を取り出す
- 取り出した投稿名をリダイレクト先のドメインの後ろつける
これを正規表現をつかって実現していきたいと思います。
大事な前提条件として、どちらもパーマリンクの最後の部分(今の場合は投稿名)が同じ文字列になっていなければなりません。ここが変わっていたらどうしようもないので気をつけてください。
それでは、まずRedirection をインストールしましょう。すでにインストールしている方はこの部分は飛ばしてください。
Redirection のインストール
Redirection はWordPressプラグイン公式サイトに登録されているので、プラグインの新規追加画面で「Redirection」と検索すれば出てきます。
プラグインの公式サイトもあます。
Redirection | Manage redirects with WordPress
こちらのページは英語ですが使い方が詳しく書かれているのでガッツリ使いたい場合は目を通しておくことをオススメします。
インストールして有効化すると、ツールの中に「Redirection」という項目が現れるのでクリックしましょう。
そうすると初回セットアップ画面が現れます。
「セットアップを開始」をクリックすると基本セットアップのページが表示されます。自動リダイレクトとログの保存の設定です。
パーマリンクを変更したときに自動的にリダイレクトしてくれるようにする場合は、“Monitor permalink change in WordPress posts and pages” にチェックを入れます。サイトを引っ越す場合は引っ越し元を更新することはないと思うのでチェック無しでOKでしょう。
ログを保存したい場合は Keep a log of all redirects and 404 erroes にチェックを入れます。ログの保存はデータベースが肥大するのでどうしても追跡したいのでなければオフでよいでしょう。
設定が終わると「セットアップを続行」をクリックします。REST APIのチェックが始まります。Good と表示されるまで待ちましょう。普通はGoodのはずです。
再び「セットアップ完了」をクリックするとセッティングが始まりるのでしばらく待ちます。私環境では十秒ぐらいで終わりました。
「完了!」をクリックすると管理画面に移動します。
Redirection の正規表現を有効にする
まず、Redirection で正規表現を使える設定します。「新しい転送ルールを追加」の「ソースURL」の右にあるリストから「正規表現」を選びます。
そうすると、右に正規表現というタグが表示されました。これで準備OKです。
ちなみに、URLをマッチングさせる方法は公式サイトにも説明されているので、一度見ておくと良いと思います。
ドメインだけを変えたい場合
ドメインのみ変えてリダイレクトする場合は下記のように設定します。
ソースURL:^\/(.*)\/
ターゲットURL:リダイレクト先のドメイン/$1
ソースURLにはリダイレクト元のドメインより後ろの部分を正規表現で指定します。この場合だと例えばリダイレクト元のURLが https://example.com/sample-post
だった場合、https://example.com
は省略できて、その後ろの/sample-post
の部分にマッチングする正規表現を書けばよいということになります。
細かい説明は下図をご覧ください。
Redirection ではソースURLにはプラグインがインストールされているドメインが自動的に設定されます。そのため書く必要はありません。
リダイレクト元のURLが日付の場合
リダイレクト元とリダイレクト先のURL構造が違う場合は色々工夫する必要があり、この記事の冒頭で紹介した日付のパーマリンクの場合は下記のような正規表現で実現できます。
ソースURL:^\/\d*\/\d*\/\d*\/(.*)\/
ターゲットURL:リダイレクト先のドメイン/$1/
これで、/数字/数字/数字/文字列/
というパターンを検索し、文字列だけを取り出して$1
に代入するという動作になります。
数字を検出する\d*
の部分は\d+
でも大丈夫です。このあたりはもっとよい書き方があれば是非コメントください。
正規表現テストサイトを使おう
いかがだったでしょう?
正規表現には書き方が色々あるので、今回ご紹介したのものだけが正解ではないですし、サイトの条件によっては上手く動かないかもしれません。
私も正規表現の理解は浅いので最初は上手くできず試行錯誤を繰り返しました。そんなときには次のような正規表現テストサイトがとても便利です。
このサイトでは正規表現を変えると結果がどう変わるかが視覚的に確認でき、細かな説明も表示されます。全て英語ですが非常に素晴らしいサイトでオススメです。
非常に参考になる記事でした。ありがとうございました。
>いすマニアさん
お役に立てて良かったです!