Format:  Topic

Date: 

Category:  |

WordPressをマルチサイト化する: サブディレクトリ式とサブドメイン式

以前書いたエントリー ( URL: http://akibonne.com/blog/archives/335 ) を削除してしまったため、 新しく書き直したメモ ( URL: http://akibonne.com/archives/1 ) にリダイレクトしています。

マルチサイトのネットワーク方式(サブディレクトリ式 v.s. サブドメイン式)を選ぶ

WordPressをインストールして間もない場合、具体的にはインストールしてから一カ月以内の場合は、サブディレクトリ式(http://your-domain.com/new-site/)とサブドメイン式(http://new-site.your-domain.com/)のどちらでマルチサイト化するか選ぶことができます。以下手順のメモです。*WordPress が root ディレクトリにインストールされている前提です。
  1. 【共通】データベースやテーマのバックアップを取ります。←ココ大事
  2. 【共通】使用中プラグインをすべて停止します。
  3. 【共通】wp-contentのディレクトリ直下にblogs.dirという名前のディレクトリを作成し、以下の文をwp-config.phpに追加します。
    define ('WP_ALLOW_MULTISITE', true);
    追加する場所は、wp-config.php の下の方にある
    /* That's all, stop editing! Happy blogging. */
    または
    /* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */
    という行のすぐ上あたりです。 完了したら、ダッシュボードを表示しているブラウザをリフレッシュします。 するとダッシュボード内のツールに『ネットワーク設定』という項目が作られます。
  4. 【共通】ダッシュボード>『ツール』>『ネットワーク』を開きます。選べる場合、サブドメイン式でネットワークを作成するかサブディレクトリ式にするかを選び、ネットワークの名前や管理者のメールアドレスを記入します。サブディレクトリ式を選べない場合は後述。
  5. 【共通】確認、決定したらインストールします。ここから後の手順は、選択したマルチサイトネットワーク方式別にコードが生成されるので、それを指示される手順に従ってそれぞれのファイルに書き込んでいきます。
  6. wp-config.php
    1. サブディレクトリ式の時に生成される、 wp-config.php にさらに追加するコード。 3の手順でwp-config.phpに書き込んだ、
      define ('WP_ALLOW_MULTISITE', true);
      の下に、以下を追加します。*●●●.com は書き換えます。
      define( 'MULTISITE', true );
      define( 'SUBDOMAIN_INSTALL', false );
      $base = '/';
      define( 'DOMAIN_CURRENT_SITE', '●●●.com' );
      define( 'PATH_CURRENT_SITE', '/' );
      define( 'SITE_ID_CURRENT_SITE', 1 );
      define( 'BLOG_ID_CURRENT_SITE', 1 );
    2. サブドメイン式の時に生成される、 wp-config.php にさらに追加するコード。 3の手順でwp-config.phpに書き込んだ、
      define ('WP_ALLOW_MULTISITE', true);
      の下に、以下を追加します。*●●●.com は書き換えます。
      define( 'MULTISITE', true );
      define( 'SUBDOMAIN_INSTALL', true );
      $base = '/';
      define( 'DOMAIN_CURRENT_SITE', '●●●.com' );
      define( 'PATH_CURRENT_SITE', '/' );
      define( 'SITE_ID_CURRENT_SITE', 1 );
      define( 'BLOG_ID_CURRENT_SITE', 1 );
  7. .htaccess の書き換え
    1. サブディレクトリ式の時は.htaccessを以下のコードで書き換える
    2. RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      # uploaded files
      RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [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).*) $1 [L]
      RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
      RewriteRule . index.php [L]
    3. サブドメイン方式の時は.htaccessを以下の文で書き換える
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.php$ - [L]
      # uploaded files
      RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
      RewriteCond %{REQUEST_FILENAME} -f [OR]
      RewriteCond %{REQUEST_FILENAME} -d
      RewriteRule ^ - [L]
      RewriteRule . index.php [L]

WordPressをインストールして1カ月以上経過したためにサブディレクトリ式を選べない場合

現時点では、WordPress をインストールしてから1カ月以上経過したサイトは自動的にサブドメイン式を選択することとなり、サブディレクトリ式を選ぶことができません。 ところがレンタルサーバーの仕様などの事情でサブドメイン式のマルチサイトネットワークを確立できない場合など、サブディレクトリ式でマルチサイト化したい場合に、試してみたらうまくいった手順をメモしておきます。 データベース・テーマ・他各種ファイルのバックアップを必ず取っておくこと←ココ大事。
  1. サブドメイン式の時に生成される、 wp-config.php にさらに追加するコード』をサブディレクトリ式に書き換えてから追加します。
    define( 'SUBDOMAIN_INSTALL', true );
    という行を、
    define( 'SUBDOMAIN_INSTALL', false );
    に書き換えます。 全体のコードは以下です。
    define( 'MULTISITE', true );
    define( 'SUBDOMAIN_INSTALL', false );
    $base = '/';
    define( 'DOMAIN_CURRENT_SITE', '●●●.com' );
    define( 'PATH_CURRENT_SITE', '/' );
    define( 'SITE_ID_CURRENT_SITE', 1 );
    define( 'BLOG_ID_CURRENT_SITE', 1 );
  2. .htaccess を、サブドメイン式ではなくサブディレクトリ式のためのコード、すなわち以下
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    # uploaded files
    RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [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).*) $1 [L]
    RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
    RewriteRule . index.php [L]
    で書き換えます。

Last Modified: