【WordPress】ドメイン移転やカテゴリスラッグやパーマリンク変更時に使う.htaccessリダイレクトまとめ

.htaccess, WordPress

WordPressのドメイン移転やカテゴリスラッグやパーマリンク変更時に使う.htaccessリダイレクト集になります

記事idから投稿スラッグ名に変更する場合

デフォルトの「基本」から「投稿名」またはカスタム構造で「/%postname%/」にした場合

変更前:https://1-notes.com/?p=123
変更後:https://1-notes.com/entry-name/

この場合は.htaccessで設定しなくても変更前のURLにアクセスがあれば自動でリダイレクトされます

設定しないまま公開してしまった記事の投稿スラッグ名を変更する場合

誤ってパーマリンクを設定しないまま記事を公開してしまった場合

変更前:https://1-notes.com/post-123/
変更後:https://1-notes.com/entry-name/

この場合も変更前のURLにアクセスがあればWordPressは自動で投稿名でのパーマリンクでのURLにリダイレクトします

焦らずに後ほど投稿名パーマリンクを設定すれば問題なく、後々にpost-xxxのページを発見してもそのまま変更しても大きな問題はありません

記事ページのURLからカテゴリスラッグを外す場合

プラグインやPHPなどを使って公開中ブログの全記事ページのURLからカテゴリスラッグを外す場合

変更前:https://1-notes.com/aaa/entry-name/
変更後:https://1-notes.com/entry-name/

この場合も変更前のURLにアクセスがあればWordPressは自動で投稿名でのパーマリンクでのURLにリダイレクトしますのでリダイレクト設定は不要になります

個別記事の投稿スラッグ名を変更

「投稿名」またはカスタム構造で「/%postname%/」で設定していて、既に公開済みの投稿名パーマリンクを変更する場合

変更前:https://1-notes.com/entry-name111/
変更後:https://1-notes.com/entry-name222/

この場合は変更前のURLから変更後のURLにリダイレクトを記述する必要があります

RewriteEngine On
RewriteBase /
RewriteRule ^entry-name111/ /entry-name222/ [R=301,L]

カテゴリのスラッグを変更

カテゴリURLに「category」を付けている場合

カテゴリのスラッグを変更する場合のリダイレクトでカテゴリURLに「category」を付けている場合

ーカテゴリページー
変更前:https://1-notes.com/category/aaa/
変更後:https://1-notes.com/category/bbb/

変更前のカテゴリページを変更後のスラッグのカテゴリページURLにリダイレクトさせます

RewriteEngine On
RewriteBase /
RewriteRule ^category/aaa/$ category/bbb/ [R=301,L]

カテゴリURLに「category」を付けていない場合

ーカテゴリページー
変更前:https://1-notes.com/category/aaa/
変更後:https://1-notes.com/category/bbb/

RewriteEngine On
RewriteBase /
RewriteRule ^/aaa/$ /bbb/ [R=301,L]

記事ページに対するリダイレクト設定は不要

記事URLは存在するパーマリンクの記事URLならデフォルトでリダイレクトされるので、カテゴリのスラッグの変更であれば、記事に対するリダイレクトの記述は不要です

WordPressは記事URLは存在しないカテゴリスラッグ以下のアクセスであっても投稿名パーマリンクから自動的にリダイレクトされます

例えば「https://1-notes.com/未分類/aaa/」の記事ページがあれば「https://1-notes.com/適当なスラッグ/aaa/」どんなスラッグでも「https://1-notes.com/未分類/aaa/」にリダイレクトします

カテゴリページURLの「category」なしからありへ変更

カテゴリページのURLに「category」をプラグインなどを使って外してたのを再度付与する場合のリダイレクト

ーカテゴリページー
変更前:https://1-notes.com/aaa/
変更後:https://1-notes.com/category/aaa/

記事ページ
変更前:https://1-notes.com/entry-name/
変更後:https://1-notes.com/entry-name/

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} !(^/category/)
RewriteRule ^(css|php|javascript)/$ /category/$1 [R=301,L]

カテゴリのスラッグ名と記事のパーマリンクを混合させない為、変更前のカテゴリスラッグ名を数だけ指定していきます

記事URLにカテゴリのスラッグを含める場合も自動で付与されるので記事用の記述は必要ありません

WordPressサイトのドメインを変更

ートップページー
変更前:https://1-notes.com/
変更後:https://2-notes.com/

ーその他のページー
変更前:https://1-notes.com/xxx/
変更後:https://2-notes.com/xxx/

以下の.htaccessを旧ドメインのトップディレクトリに設置する事でトップページ以下全てのディレクトリ、ファイルURLが新ドメインにリダイレクトします

RewriteEngine On
RewriteRule ^(.*) https://2-notes.com/$1 [R=301,L]

※Chromeで動作テストする場合は、Chromeの機能でアクセスしたリダイレクト結果をキャッシュしていて.htaccessの記述を変更・削除してもキャッシュによって変えられない・戻らない場合があります

その場合は「chrome://settings/clearBrowserData」にアクセスしてキャッシュデータを削除する事で解除されます