WordPressをマルチサイトに対応させる場合の注意点
Publish2012/10/26(金)
この記事がいつまでたってもよく見られているので、少し見やすいように変更する事にしました。
WordPressは2015年11月現在でも最も世界で使われるCMSという事になっています。
WordPressをそのまま使うだけであればいいんですが、マルチサイトにして運用しようとする人が僕含めて結構いるという事でしょう。
それに伴い、マルチサイトの設定でつまづく人も多い様子です。
そこで、WordPressで使えるマルチサイトの機能を使用する際に注意する点を書いておきます。
まずは、知らない人用にマルチサイトについて軽く説明。
WordPressのマルチサイトとは?
WordPressは基本的に1サイト(1ブログ)に対して1つインストールするシステムです。
でも、世間的な要望を受けてか3.0になってからマルチサイト機能が追加されて、インストールしたWordPressで複数のサイトを管理できるようになりました。
これがいわゆるマルチサイト機能というやつです。
今までサイトごとにしか、場合によってはディレクトリ別にインストールしていたWordPressの管理画面がひとつになるので、複数サイトの運営もこれまでよりも簡単になります。
もちろん管理画面がひとつになるということは、そこが壊れたら一気に全て飛んでしまうというリスクも高まりますので一概に一つにするのがベストであるとは思いませんが、できるということは知っておいたほうがいいかなと思います。
実際の導入手順
では実際にマルチサイト化するための手順を書いておきます。
今回は例としてサブディレクトリ型で説明します。
サブドメイン型、独自ドメイン型もできるのですが、その場合はDNSを変更する必要があるので、ちょっと初心者には敷居が高いかと思います。
1.WordPressをインストール
2.WordPressをインストールしたディレクトリの「wp-config.php」ファイルをローカルにダウンロード
(バックアップも取っておくことをおすすめします。)
3.ダウンロードした「wp-config.php」に
define ('WP_ALLOW_MULTISITE', true);
を追記。
4.追記した「wp-config.php」を保存してアップロード
5.WordPressの管理画面をリロード
6.使用しているプラグインを一旦全て無効化し、「ツール」から「ネットワーク」を選択
7.形式を「サブディレクトリ式」にチェックを入れて、必要事項を入力後、インストール開始
8.インストール完了後の指示に従って以下3つを行う
・「wp-content」ディレクトリに「blogs.dir」ディレクトリを作成して、パーミッションを「777」に変更。
・「wp-config.php」に以下のようにWordPressから指定されたコードを貼付ける。
先ほど追加したdefine (‘WP_ALLOW_MULTISITE’, true);の下とかにまとめておくと分かりやすいかも。
define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', false);
$base = '/';
define('DOMAIN_CURRENT_SITE', 'hogehoge.funnis.net');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);
・「.htaccess」に以下のようなWordPressから指定されたコードを貼付ける。
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]
9.管理画面から子サイトを実際に作ってみる
という流れで使えるようになるんですが、ここで本題です。
この指示通りにやると僕の場合以下のエラーが出ました。
でそのエラー内容と対応方法です。
WordPressをマルチサイトにした時に起こるリダイレクトループの解決方法について
問題の現象は親サイトではなくて、子サイトを作った際に起こります。
具体的には子サイトのダッシュボードに入ろうとするとリダイレクトループによってログイン出来なくなります。
ログイン出来ないので、もちろん更新はできません。
さて困ったという状況になるのですが、この解決方法は実はかなり簡単でした。
その解決方法が
.htaccessに不要な記述が入ってリダイレクトループが起こっているのでその記述を削除なりコメントアウトしてあげる
という方法です。
先程のマルチサイト化する際に「.htaccess」に追記した部分、アレが問題でした。
追記じゃなくて感覚的には上書きした方がいい感じだったんですね。
で、元からあった記述をこんな感じで書き換えます。
# BEGIN WordPress
#
#RewriteEngine On
#RewriteBase /
#RewriteRule ^index\.php$ - [L]
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteRule . /index.php [L]
#
# END WordPress
元あった記述を全部コメントアウトした例です。
これで正常にマルチサイトが動きます。
分からなくてテンパると、はまってしまうので注意してくださいね。
まとめ
WordPressは便利ではありますが、初心者がカスタムしようとするとドはまりすることもあります。
コードがphpで書かれているので、分かる人にとっては便利に変更ができるわけですが、世間一般の多くの人がphp分かるわけではないので、困った時にこうやってググって僕のようなブログに到達するわけです。
多くの人が使うようになればなるほど、この手の問題はまだまだ出てくるということです。
マルチサイトにしても、本来想定していない使い方だと思うんですけど、やっぱり複数のブログを一括管理する方が楽なのでそのニーズはありますよね。
この辺を今後どう対応していくのかは非常に気がかりではあります。