WordPressサイトを example.com/shop/ のようなサブディレクトリから shop.example.comのようなサブドメインへ移行する際に、.htaccessの設定でつまずいている人は少なくないと思います。本記事では、.htaccessの設定方法を解説します。
.htaccessにリダイレクトを設定する
旧サイト(サブディレクトリ)へのアクセスを新サイト(サブドメイン)へ転送するために、301リダイレクトを設定します。方法を2つ解説します。
方法1:Redirect ディレクティブを使用する
旧サイトの .htaccess の最上部に以下を追記します。mod_rewriteに依存しないため、キャッシュプラグインとの競合が起きにくく、最も安定した方法です。
Redirect 301 /shop https://shop.example.com
Redirect ディレクティブはプレフィックス一致のため、第2階層以下のURL(例:/shop/category/item/)も自動的にリダイレクトされます。
方法2:mod_rewrite を使用する場合
旧サイトの .htaccessの最上部(キャッシュプラグインのブロックより上)に以下を追記します。
# BEGIN Redirect to new domain
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /shop/
RewriteRule ^(.*)$ https://shop.example.com/$1 [R=301,L]
</IfModule>
# END Redirect to new domain
新サイト(サブドメイン)の .htaccess設置
新サイトのドキュメントルートには、標準的なWordPress用の .htaccess を設置します。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
よくあるトラブルと対策
続いて、よくあるトラブルと対策を解説します。
トラブル1:第2階層以下のページがリダイレクトされない
原因:WordPressブロック(# BEGIN WordPress)が先に実行され、リダイレクトルールに到達しない。
対策:リダイレクトブロックをWordPressブロックより上に配置する。または Redirectディレクティブ(方法1)を使用しましょう。
トラブル2:キャッシュプラグインが原因でリダイレクトされない
原因:W3 Total Cache・WP Super Cache などのキャッシュプラグインが .htaccessの最上部にルールを自動追加しており、キャッシュ済みのHTMLファイル(/wp-content/cache/all/...)を直接配信してしまうため、リダイレクトルールに到達しない。
対策:以下の順で対応しましょう。
| 優先度 | 対策 | 理由 |
|---|---|---|
| 1位 | キャッシュを全削除+自動生成をOFF | 根本解決。移行元サイトにキャッシュは不要 |
| 2位 | キャッシュ削除+リダイレクトをキャッシュブロックより上に配置 | 再キャッシュ生成を防ぎつつ確実にリダイレクト |
| 3位 | リダイレクトをキャッシュブロックより上に配置のみ | キャッシュが再生成されると再発する可能性あり |
キャッシュファイルはサーバー上で以下のコマンドで削除できます。
WordPressの設定変更
ファイル・DBの移行と合わせて、以下も対応しましょう。
- WordPress管理画面「設定 → 一般」でサイトURL・WordPress URLを新ドメインに変更
- DB内のURLをSQLまたはプラグイン(Search & Replace等)で一括置換
- wp-config.php のDB接続情報・table_prefix を確認
- 301リダイレクト動作確認
まとめ
今回は、WordPressサイトをサブディレクトリからサブドメインへ移行する際の「.htaccess」設定を紹介させていただきました。
他の方が紹介している記事も見ましたが、「# BEGIN WordPress」の中で、「RewriteRule」を変更するような間違った情報が散見されました。私が調べた限り、「# BEGIN Redirect to new domain」で「RewriteRule」を設定する記事は本記事以外ありませんでした。
ドメイン移管なのですから、そもそもWordPress(ワードプレス)ではなくdomain(ドメイン)を指定してあげなければ変更されようがありません。
本記事に出会えたあなたはラッキーです!
何かお困りごとがありましたら、私のようなWebのプロにご相談ください。
Webマーケティングがメインですが、有償にはなりますが、WordPressサイトの設定やSEO含めたドメイン移管にも対応できますよ。


