2026年5月21日

2026年5月21日

WordPressマルチサイトのドメインエラーの直し方|サブサイトが開かない・独自ドメインが404

WordPress のマルチサイトで、サブサイト(site2.example.com や example.com/site2/)が開かない、新規サイトの登録画面に飛ばされる、独自ドメインを割り当てたら表示もログインもできない、といった問題は、ほとんどが次のどこかの食い違いで起こります。

  • wp-config.php の定数
  • データベースに登録されたサイトのドメインとパス(wp_blogs と wp_site テーブル)
  • DNS(サブドメイン型ではワイルドカードの設定)
  • Web サーバーの設定(受け付けるホスト名と書き換えルール)
  • SSL 証明書

この記事では、症状から原因の見当をつけ、上の順に確かめて直す手順を説明します。画面の名前とメッセージは WordPress 7.1(2026年10月時点の最新版)の日本語表示に合わせています。

作業の前に、データベースと wp-config.php のバックアップを取ってください(wp db export で書き出せます)。

症状から原因の見当をつける

症状 主な原因 見る手順
サブドメインのサブサイトを開くと wp-signup.php?new=…(新規サイトの登録画面)に転送される そのドメインのサイトが wp_blogs に無い(綴り・www の有無・ドメイン移行時の置換漏れ) 手順2
「データベース接続確立エラー」が出る(管理画面側では「Could not find site …」と詳しく出る) DOMAIN_CURRENT_SITE・PATH_CURRENT_SITE と wp_site・wp_blogs の値が合っていない 手順1・手順2
サブドメインを開くとブラウザーが「サーバーが見つからない」と表示する ワイルドカード DNS が無い 手順3
サブドメインを開くと別のサイトや Web サーバーの初期ページが出る Web サーバーがそのホスト名を受け付けていない 手順4
サブディレクトリのサブサイトだけ 404、管理画面の CSS が崩れる .htaccess や nginx の書き換えルールが無い・古い 手順4
証明書のエラーが出る 証明書がサブドメインや独自ドメインを含んでいない 手順5
独自ドメインのログイン画面で Cookie のエラーが出る、ログインしてもログイン画面に戻される Cookie のドメイン 手順6
/wp-admin/network/ で「マルチサイトのサポートが有効ではありません。」と出る MULTISITE 定数が定義されていない 手順1

手順1:wp-config.php の定数を確かめる

マルチサイトの定数は、管理画面の「ツール」→「サイトネットワークの設置」でネットワークを作成したときに表示されたものを使います。サブドメイン型の場合は次の形です。

<?php
// wp-config.php の「stop editing」の行(日本語版では「編集が必要なのはここまでです」)より上に書く
define( 'WP_ALLOW_MULTISITE', true );
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true ); // サブディレクトリ型は false
define( 'DOMAIN_CURRENT_SITE', 'example.com' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );

確かめる点は次のとおりです。

  • DOMAIN_CURRENT_SITE はメインサイトのドメインだけを書く。https:// や末尾の / は付けない。www 付きで運用しているなら www も含める
  • PATH_CURRENT_SITE は WordPress をドメイン直下に置いているなら /
  • SUBDOMAIN_INSTALL は、ネットワークを作成したときの方式と同じにする

WP-CLI では次のように確かめられます。

wp config get MULTISITE
wp config get SUBDOMAIN_INSTALL
wp config get DOMAIN_CURRENT_SITE
wp config get PATH_CURRENT_SITE

アップロード先を古い blogs.dir に変える UPLOADBLOGSDIR などの定数は、現在のマルチサイトでは不要です。WordPress 3.5 以降に作成したネットワークでは、サブサイトのファイルは wp-content/uploads/sites/サイトID/ に保存されます。

手順2:データベースのドメインとパスを確かめる

WordPress は、アクセスされたドメインとパスを wp_blogs テーブルと照らし合わせて、どのサイトを表示するかを決めます。ここに無いドメインでアクセスすると、サブドメイン型では新規サイトの登録画面に転送されます。

# 各サイトのドメインとパス
wp site list --fields=blog_id,domain,path,url

# ネットワーク(メインサイト)のドメインとパス
wp db query "SELECT id, domain, path FROM wp_site;"

テーブルの接頭辞を wp_ から変えている場合は、wp_site の部分を自分の接頭辞に合わせます(wp db prefix で確認できます)。

確かめる点は次のとおりです。

  • wp_site の domain と path が、手順1の DOMAIN_CURRENT_SITE・PATH_CURRENT_SITE と同じか
  • ブラウザーで開いているドメインと、wp_blogs の domain が一致しているか(www の有無も含む)

ドメインを移したあとに開かなくなった場合

別のドメインから移行した場合は、データベースに古いドメインが残っていることがよくあります。WP-CLI の search-replace に --network を付けると、wp_blogs と wp_site を含むネットワーク全体のテーブルを置換できます。古いドメインで WordPress を読み込むため、--url に古いドメインを指定します。

# まず変更件数だけ確かめる
wp search-replace --url=old.example 'old.example' 'example.com' --network --skip-columns=guid --dry-run

# 問題なければ実行する
wp search-replace --url=old.example 'old.example' 'example.com' --network --skip-columns=guid

置換が終わったら、手順1の DOMAIN_CURRENT_SITE も新しいドメインに書き換えます。

手順3:DNS を確かめる(サブドメイン型)

サブドメイン型では、新しいサブサイトを作るたびに DNS を追加しなくて済むよう、ワイルドカードの A レコードを設定するのが一般的です。

*.example.com.  A  203.0.113.10

実在しないサブドメインで引いて、サーバーの IP アドレスが返るかを確かめます。

dig +short test-abc.example.com

何も返らない場合は、DNS の管理画面でワイルドカードのレコードを追加します。設定の方法はワイルドカードDNSレコードの設定も参照してください。ワイルドカードを使えないサービスの場合は、サブサイトごとに A レコード(または CNAME)を追加します。

手順4:Web サーバーの設定を確かめる

Apache の場合

サブドメイン型では、バーチャルホストがサブドメインも受け付けるよう ServerAlias を設定します。

<VirtualHost *:443>
    ServerName example.com
    ServerAlias *.example.com
    DocumentRoot /var/www/example.com
    <Directory /var/www/example.com>
        AllowOverride All
    </Directory>
    # SSL の設定は省略
</VirtualHost>

.htaccess の書き換えルールは、WordPress の公式ドキュメントにある次のものを使います(「サイトネットワークの設置」の画面にも表示されます)。

サブドメイン型:

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^wp-admin$ wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^(.*\.php)$ $1 [L]
RewriteRule . index.php [L]

サブディレクトリ型:

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]

wp-includes/ms-files.php に転送する files/ の行は、WordPress 3.5 より前に作成したネットワーク向けのものです。3.5 以降に作成したネットワークでは使いません。

nginx の場合

サブドメイン型では server_name にワイルドカードを加えます。

server {
    server_name example.com *.example.com;
    root /var/www/example.com;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP(location ~ \.php$)と SSL の設定は省略
}

サブディレクトリ型では、公式ドキュメントにある次の書き換えを server ブロックに加えます。これが無いと、サブサイトの管理画面や CSS・JavaScript が 404 になります。

if (!-e $request_filename) {
    rewrite /wp-admin$ $scheme://$host$request_uri/ permanent;
    rewrite ^(/[^/]+)?(/wp-.*) $2 last;
    rewrite ^(/[^/]+)?(/.*\.php) $2 last;
}

設定を変えたら、sudo nginx -t で確かめてから sudo systemctl reload nginx で反映します。

手順5:SSL 証明書を確かめる

  • サブドメイン型では、*.example.com を含むワイルドカード証明書が必要です。ワイルドカード証明書は1階層分だけ有効で、example.com そのものは含まないため、example.com と *.example.com の両方を入れて取得します
  • Let's Encrypt でワイルドカード証明書を取るには DNS 認証(DNS-01)が必要です(Let's Encryptでワイルドカード証明書を取得する方法)
  • 独自ドメインを割り当てたサブサイトは、そのドメインの証明書も別に必要です

手順6:独自ドメインを割り当てる(ドメインマッピング)

WordPress 4.5 以降は、プラグインを使わずにサブサイトへ独自ドメインを割り当てられます。

  1. 独自ドメイン(例:custom-domain.com)の A レコードを、ネットワークと同じサーバーの IP アドレスに向ける
  2. Web サーバーがそのドメインを受け付けるようにする(Apache の ServerAlias、nginx の server_name に追加)
  3. そのドメインの SSL 証明書を用意する
  4. ネットワーク管理の「サイト」で対象サイトの「編集」を開き、「サイトアドレス (URL)」を https://custom-domain.com に変えて保存する

独自ドメインのサブサイトにログインしようとして Cookie のエラーが出る、ログインしても画面が戻る場合は、公式ドキュメントにあるとおり、ネットワークの定数の下に次の1行を加えます。

<?php
// wp-config.php:独自ドメインでログインできない場合だけ追加する
define( 'COOKIE_DOMAIN', $_SERVER['HTTP_HOST'] );

sunrise.php(define( 'SUNRISE', true );)は、それを必要とするドメインマッピング用のプラグインを使う場合のものです。WordPress 本体の機能で割り当てる場合は必要ありません。

注意事項

  • サブドメイン型とサブディレクトリ型は、ネットワークを作成した後に定数を書き換えるだけでは切り替わりません。既存サイトの wp_blogs のドメインとパスはそのまま残るため、方式は作成前に決めてください
  • 共有のレンタルサーバーでは、ワイルドカードのサブドメインや、独自ドメインの追加に制限がある場合があります。契約しているサービスの対応状況を確かめてください
  • wp_blogs を直接 SQL で書き換えると、各サイトの home・siteurl オプションと食い違うことがあります。ドメインの変更は、ネットワーク管理の「サイトを編集」か wp search-replace で行うほうが安全です

マルチサイトの作り方そのものはWordPressマルチサイトの設定方法で説明しています。

まとめ

  • DOMAIN_CURRENT_SITE・PATH_CURRENT_SITE と、wp_site・wp_blogs のドメインとパスが一致しているかを最初に確かめる
  • サブドメイン型は、ワイルドカード DNS、Web サーバーのワイルドカードのホスト名、ワイルドカード証明書の3つがそろって動く
  • サブディレクトリ型で 404 になるときは、公式の書き換えルールを入れ直す
  • 独自ドメインは「サイトアドレス (URL)」で割り当て、ログインできないときだけ COOKIE_DOMAIN を加える

お気軽にご相談ください

お見積りへ お問い合わせへ
▲