サイトを移転したり、ドメインを変えたり、パーマリンクを変えたときはリダイレクトと作業をします。
リダイレクトをしないとせっかく受けた記事の評価などが引き継がれないので、注意しましょう。
本記事ではRedirectionというプラグインを使ったリダイレクト設定をまとめました。
基本、このプラグインを使えばリダイレクト周りはカバーできます。
サイトの移転・引越し
Redirectionはついつい正規表現を使って、変更してしまいがちですが、
実はドメインを入れるだけでサイトの移転設定が完了します。
しかもログイン画面や管理画面を除外してくれるので、正規表現で設定するよりもはるかに有用です。
正規表現を使った例
一応、正規表現を使った例も掲載しておきます。
例:サブディレクトリ☞別ドメインの場合
https://??.com/sub/(.*)$
↓
https://??2.com/$1
例:ドメイン☞別ドメインのサブディレクトリの場合
https://??.com/(.*)$
↓
https://??2.com/sub/$1
正規表現の使い方を覚えると特定の箇所だけ、たとえば特定のカテゴリーだけリダイレクトすることが簡単にできます。
パーマリンクの移行
リダイレクトの設定によっては正規表現が使えないことがあります。
その場合、パーマリンクの移行から設定できます。
しかし、これはベータ版の機能で、確実出ないと公式が公言しています。
たとえば記事ごとに割り当てられたカテゴリーを参照しつつ、リダイレクトするのは難しいです。
Redirection用のCSVを出力するコード
カテゴリーが複数ある場合もあるので、こういった時はリダイレクト元とリダイレクト先を記したCSVを出力して、それをインポートすることで解決します。
以下は記事名からカテゴリー名>記事名へパーマリンクの設定を変えてリダイレクトするためのCSVを出力するコードです。
funcitons.phpに記載して、下記のURLにアクセスするとCSVがダウンロードできます。
https://ドメイン名/?generate_redirects=true
function generate_redirects_csv() {
if (current_user_can('manage_options')) {
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
);
$posts = get_posts($args);
$csv_data = "Source URL,Target URL\n";
foreach ($posts as $post) {
// カテゴリを取得
$categories = get_the_category($post->ID);
if (!empty($categories)) {
$category_slug = $categories[0]->slug; // 最初のカテゴリを利用
$source_url = home_url() . "/" . $post->post_name . "/";
$target_url = home_url() . "/" . $category_slug . "/" . $post->post_name . "/";
$csv_data .= "{$source_url},{$target_url}\n";
}
}
// CSV出力
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename="redirects.csv"');
echo $csv_data;
exit;
} else {
wp_die('権限がありません。');
}
}
add_action('init', function() {
if (isset($_GET['generate_redirects'])) {
generate_redirects_csv();
}
});
サブディレクトリから親ディレクトリにリダイレクトする
サブディレクトリから親ディレクトリにリダイレクトする場合はRedirectionで設定しづらいです。
その場合は.htaccessに以下の記述をしましょう。
※subのところはサブディレクトリ名を入れる
# サブディレクトリから親ディレクトリへのリダイレクト設定
# 管理画面(wp-admin)へのアクセスはリダイレクトしない
RedirectMatch permanent ^/sub/(?!wp-admin)(.*)$ /$1
【応用例】特定のディレクトリ以外を301リダイレクトする
特定のディレクトリ以外をリダイレクトする場合は下記のように記述します。
# 特定のディレクトリをリダイレクトから除外
RewriteEngine On
RewriteCond %{REQUEST_URI} !^/sub1/
RewriteCond %{REQUEST_URI} !^/sub2/
# 除外されていない他の全てのページをパスを保持してリダイレクト
RewriteRule ^(.*)$ https://motoki-design.co.jp/wordpress/$1 [R=301,L]
まとめ
リダイレクトを失敗してしまうと、元に戻すのが大変な場合があるので注意しましょう。
困った時は、ぜひWordPressのカスタマイズが得意な人に相談してみましょう。