公開後1カ月以上経過したWordPressをマルチサイト化

久しぶりにWordPressのメモです。
この記事のポイントはこちら

  1. 公開済みのWordPressサイトをサブディレクトリ型(http://domainname.com/***/)でマルチサイト化する
  2. あれ?強制的にサブドメイン型(http://***.domainname.com)になってしまった!
  3. なんとか頑張ってサブディレクトリ型にしたけど子サイトがリダイレクトループ!
  4. .htaccessに追記したらなんとか問題が解決したけど子サイトにログイン出来ない!

という訳でドツボにハマったので反省と記録と今後のメモです。

まず「1」の手順は基本通り進めて行きました。

  • データベースバックアップ
  • プラグイン停止
  • wp-config.phpの「/* 編集が必要なのはここまでです ! WordPress でブログをお楽しみください。 */」の上に以下記載してFTP転送
    /* マルチサイト有効化 */
    define('WP_ALLOW_MULTISITE', true);
  • WordPress管理画面「ツール>ネットワークの設置」をクリック

しかしここで画面をよく読まず「インストール」を押下した私。
なんとこの時点で
新規インストールではないため、WordPress ネットワーク内のサイトはサブドメインを使う必要があります。・・・」といった案内が表示されていたのです。

WordPressのフォーラムを覗いてみて分かった事は、公開後1ヶ月を経過したサイトはパーマリンクの事故を防ぐ為にサブドメイン型でしかマルチサイト化出来ないとの事・・・。

でもなんとしてもサブディレクトリじゃないといけないので更に調べましたところ、なんとか解決作を示して下さっている記事「サブディレクトリでマルチブログ(wordpress3.0)さくらインターネット」に辿りつきました。(昔は
wp-contentの中に「blogs.dir」も作っておかなければいけませんでしたが、最近のバージョンではマルチサイトのメディアファイルはblogs.dirじゃなくて「uploads>sites」の中に保存されるので不要)

これで無事サブディレクトリ型で設置する事が出来た訳ですが、今度は子サイトの管理画面にアクセスすると強制ログアウトさせられました。

さらに本体にもログインしようとしてもパスワードが弾かれてログイン出来なくなってしまった。
こういう時は1つずつロールバックするのが吉。
書き替えた部分を1箇所ずつ遡ります。

まずwp-config.phpに書いたマルチサイト化する為のコードの内、「define(‘SUBDOMAIN_INSTALL’,false);」としていた所を「define(‘SUBDOMAIN_INSTALL’,true);」に戻してアップロードするとログイン出来る様にはなりましたがまた子サイトからはじき出されてしまいます。

あと考えられるのは.htaccessに書いたリライトルールだけだと思って見直すのですが、マルチサイト化した時に管理画面に表示されたまま書いてある為、ダメな所が見つかりません。

色んなブログにサーバーのパスが勝手に書き出されているせいと書かれていましたがそういった記述も無し。
余計な文があるんじゃなくて何か足りないのかも?と思い、他のマルチサイト化したサイトの.htaccessと見比べてみた所、足りない1行を発見しました。

↓これ

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

これを.htaccessに書き足してアップロードしたら子サイトも無事ログイン出来ましたよ!
よかった!と、思ったのも束の間、またエラーを吐いたので初心に戻って調べ直し、最終的に.htaccessはこうなりました。

RewriteEngine On
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-config.phpに書き足したのはこれです。(DOMAIN_CURRENT_SITEは架空のものです)

 

/* マルチサイト有効化 */
define('WP_ALLOW_MULTISITE', true);

define('MULTISITE', true);
define('SUBDOMAIN_INSTALL',true);
define('DOMAIN_CURRENT_SITE', 'domainnamehohohohoho.jp');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

これから子サイトに親サイトの中身をミラーコピーするので、そのやり方もいい方法を見つけられたらメモしたいです。


 

【後日追記】
マルチサイト化もミラーコピー作業も滞りなく終わったので覚えている限りの手順をメモします。

サブドメイン型でマルチサイト化完了後

WordPressで作業

  1. ブログ(子サイト)を新規作成
  2. 親ブログの中身をWordPress管理画面でエクスポート
  3. 子サイトにインポート(メディアも含めて)
  4. この時点では記事のリンクはすべて親ブログになってます。

データベースで作業

  1. 親サイトテーブルをエクスポートしてテーブル名を子サイトに書き変える。
    (wp_option.sql→wp_2_option.sql)
    ※テキストエディタで開いて中身も置換する。
  2. 念の為データベースのバックアップを取ってから、既に作成されている子サイトのテーブルを削除してインポート
  3. ログアウトして画像やリンクが切れていないか無いか確認。
    (ログインしているとキャッシュか何かで正常に見えたりします)

この記事にコメントを残す