WordPressサイトをサブディレクトリからサブドメインへ移行する際の「.htaccess」設定

WordPressサイトをサブディレクトリからサブドメインへ移行する際の「.htaccess」設定の記事アイキャッチ画像

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含めたドメイン移管にも対応できますよ。

浅井へのお仕事相談はコチラ

タイトルとURLをコピーしました