.htaccess による WordPress 301 リダイレクト方法まとめ
WordPress で運営しているブログ・サイトの「301 リダイレクト」設定方法を、以下のケース別にまとめています。
移行そのものに関しては以下の記事をご覧ください。
.htaccess によるリダイレクト
すべてのリダイレクトは .htaccess
の編集で対応できます。
各ページのパーマリンクを変更したとき
- リダイレクト元
-
- https://example.com/before/
- リダイレクト先
-
- https://example.com/after/
同じサイト(ドメイン)内でパーマリンクを変えるとき、最も簡単なコードは以下のとおりです。
Redirect 301 /before/ /after/
上記のコードでは、パラメーター付きの URL は転送されません(広告や一部 SNS からのアクセスには、パラメーターが付きます)。
パラメーター付きの URL も転送したい場合は、以下のコードになります。
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/before/
RewriteRule ^before/(.*)$ /after/$1 [R=301,L,QSA]
一部のページを別のサイトに移動したとき
- リダイレクト元
-
- https://example.com/before/
- リダイレクト先
-
- https://example.jp/before/
- https://blog.example.com/before/
- https://example.com/blog/before/
一部のページを別のサイト(サブディレクトリやサブドメインを含む)に移動するとき、最も簡単なコードは以下のとおりです。
# 別ドメインに移動
Redirect 301 /before/ https://example.jp/before/
# サブドメインに移動
Redirect 301 /before/ https://blog.example.com/before/
# サブディレクトリに移動
Redirect 301 /before/ https://example.com/blog/before/
パラメーター付きの URL も転送したい場合は、以下のコードになります。
# 別ドメインに移動
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/before/
RewriteRule ^before/(.*)$ https://example.jp/before/$1 [R=301,L,QSA]
# サブドメインに移動
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/before/
RewriteRule ^before/(.*)$ https://blog.example.com/before/$1 [R=301,L,QSA]
# サブディレクトリに移動
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/before/
RewriteRule ^before/(.*)$ https://example.com/blog/before/$1 [R=301,L,QSA]
パーマリンク設定を変更したとき
WordPress のパーマリンク設定(共通設定)を変更するさい、環境によってコードが異なります。
もともとが「基本」だった場合、リダイレクト設定は必要ありません。WordPress が自動的に変更後のパーマリンク構造にリダイレクトしてくれるためです。
ここでは、その他の構造から「投稿名」に変更するパターンのみご紹介します。
- 変更前
-
- /%year%/%monthnum%/%day%/%postname%/(日付と投稿名)
- /%year%/%monthnum%/%postname%/(月と投稿名)
- /archives/%post_id%(数字ベース)
- /%post_id%/(数字のみ / カスタム構造)
- 変更後
-
- /%postname%/
.htaccess
はそれぞれ以下のとおり。
# 日付と投稿名から投稿名
RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(?!page/)(.+)$ https://example.com/$4
# 月と投稿名から投稿名
RedirectMatch 301 ^/([0-9]{4})/([0-9]{2})/(?!page/)(.+)$ https://example.com/$3
# 数字ベースから投稿名
RedirectMatch 301 ^/archives/(\d+)$ https://example.com/?p=$1
# 数字のみから投稿名
RedirectMatch 301 ^/(\d+)$ https://example.com/?p=$1
%post_id%
から変更するとき、いったん「基本」にリダイレクトし、そこからさらに「投稿名」にリダイレクトする形になります。
Create Redirects | Yoast SEO を使うと簡単です。
ドメインを変更したとき
- リダイレクト元
-
- https://example.com/
- リダイレクト先
-
- https://example.jp/
サイトのドメインを変更するとき(ドメインを載せ替えるとき)のコードは、以下のとおり。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ https://example.jp/$1 [R=301,L]
上記コードが書かれた .htaccess
を残しておけば、リダイレクト元の WordPress を削除しても問題ありません。
サーバーの仕様にもよりますが、WordPress のドメイン載せ替えは「別の WordPress に変更」という形になります。
ルート / サブドメイン / サブディレクトリに変更したとき
- リダイレクト元
-
- https://example.com/
- https://blog.example.com/
- https://example.com/blog/
- リダイレクト先
-
- https://example.com/
- https://blog.example.com/
- https://example.com/blog/
同じドメイン内でサイトを丸ごと移動する場合、サブディレクトリのみやや扱いが難しくなります。
# ルートからサブドメインに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ https://blog.example.com/$1 [R=301,L]
# ルートからサブディレクトリに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteCond %{REQUEST_URI} !^/blog/
RewriteRule ^(.*)$ https://example.com/blog/$1 [R=301,L]
# サブドメインからルートに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^blog\.example\.com$
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]
# サブドメインからサブディレクトリに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^blog\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/blog/$1 [R=301,L]
# サブディレクトリからルートに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^blog/(.*) https://example.com/$1 [R=301,L]
# サブディレクトリからサブドメインに移動
RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^blog/(.*)$ https://blog.example.com/$1 [R=301,L]
RewriteRule
のリダイレクト先ドメインを変更して、「ルートから別ドメインのサブドメインへリダイレクト」という形にも対応できます。
プラグイン「Redirection」によるリダイレクト
以下のリダイレクトに関しては、.htaccess
の編集ではなく、プラグイン「Redirection」を使うほうが簡単です。
各ページのパーマリンクを変更
- リダイレクト元
-
- https://example.com/before/
- リダイレクト先
-
- https://example.com/after/
サイト内でリダイレクトするときは、ドメインを省略してかまいません(ドメインを含んだ URL をそのままコピペしても OK。プラグインが自動的に調整してくれます)。
オプションでチェックが入っている「大文字小文字の区別なし」「スラッシュ無視」は、そのままの状態で大丈夫です。
- ソース URL:
/before/
- ターゲット URL:
/after/
一部のページを別のサイトに移動
- リダイレクト元
-
- https://example.com/before/
- リダイレクト先
-
- https://example.jp/before/
他のサイトにリダイレクトさせるときは、「ターゲット URL」にドメインを含めた URL をコピペするだけです。
- ソース URL:
/before/
- ターゲット URL:
https://example.jp/before/
サイト全体の転送には向かない
Redirection は正規表現を扱えるので、パーマリンク設定変更やサイト全体の移行も処理できます。
しかし、以下の場合は設定したリダイレクトが無効になってしまいます。
- リダイレクト元の WordPress を削除した場合
- 何らかのトラブルでプラグインが停止した場合
「全体的にリダイレクトするなら .htaccess
」「少数ページをリダイレクトするなら Redirection」という使い分けがおすすめです。
301 リダイレクトに関する FAQ
WordPress の 301 リダイレクトに関し、よくいただくご質問を以下に掲載しています。
まとめ
.htaccess
の編集に失敗すると、500 エラーなどでサイトが表示されなくなるおそれがあります。
WordPress で 500 Internal Server Error になる原因と解決策
ページ単位でリダイレクトするなら、プラグイン「Redirection」がおすすめ。
WordPress 初心者であれば、ドメインの載せ替えやサブドメイン / サブディレクトリ間の移行など、全体的に変更するときのみ .htaccess
で設定するとよいですね。
エラーが出て手に負えなくなった、ドメイン変更を代行してほしい、という場合はお気軽にご相談ください。