Wordpressでサブディレクトリでマルチサイト化したけど色々大変だった件
Wordpressでマルチサイト化する方法として、サブドメインで分ける方法とサブディレクトリで分ける方法ありますよね。
今回サブディレクトリする中で色々と大変だったのでメモします。
(ちなみに人に頼まれてサブディレクトリ化してますが、個人的にはサブドメインの方が好きです)
あと、基本的な事ですが設定を変更する際には必ず、データベースとファイルの両方のバックアップをとりましょう!
バックアップの取り方が分からない人はこの記事が参考になりますよ。
トラブルその1:ネットワークインストール時にサブディレクトリの選択ができない
サブディレクトリ化しいく流れとして、wp-config.php
を変更して、管理画面>ツール>ネットワーク設置を選択して、ネットワークをインストールするかと思いますが、その時に「サブドメインへのインストール」にこんな表示がでました。
新規インストールではないため、Wordpressネットワーク内のサイトはサブドメインを使う必要があります。メインサイトをサブディレクトリにインストールしている場合、修正したパーマリンク構造を使う必要があり、現存リンクを壊してしまう可能性があります。
な、なんだって〜!(てんやわんや)
この記事によると、Wordpressの仕様という事だそうです。
次の場合にはサブディレクトリ型インストールを選べません。
WordPressを設置してから1ヶ月以上経っている場合。既存のパーマリンク構造に問題が生じるため。(この問題は今後のバージョンで修正される見込みです。See Switching between subdomains and subfolders for more information.)
解決方法
という事でサブディレクトリ化するためには、1ヶ月以前の投稿を0にすればいいわけです。
ただ、管理画面から削除しただけではデータベースに残ったままになるので、phpMyAdminかなんかで直接SQLを実行します。
SELECT * FROM wp{prefix}_posts WHERE post_date < DATE_SUB(NOW(), INTERVAL 1 MONTH) AND post_status = 'publish'
ここで抽出されたレコードが1ヶ月前の投稿データです。
こやつらのpost_date
とpost_date_gmt
を変更します。(とりあえず本日の日付にしてます)
UPDATE wp{prefix}_posts SET post_date = DATE(NOW()), post_date_gmt = DATE(NOW()) WHERE post_date < DATE_SUB(NOW(), INTERVAL 1 MONTH) AND post_status = 'publish';
はい。これで問題なくサブディレクトリへのインストールが選択できるようになりました。
トラブルその2:.htaccessでリダイレクトしているとサイトの新規追加ができない。
まぁ、無事にサブディレクトリがインストール出来て、平和が訪れたと思っていたわけですよ。
せっかくマルチサイト化したので、元気良くサイトを新規追加しようとしたらですね、以下の画面が出たとです。
「本当に実行していいですか?」じゃねーよ。速やかに且つ安全に実行しなさいよ。
「もう一度お試しください」を押しても管理画面トップに戻るだけで、サイトが追加できない。ホント束の間の休息でしたよ。
解決方法
色々調査してたら、どうも.htaccess
ファイルに原因があるっぽい。
.htaccess
の中でホームにアクセスした際にURLにwww
を付け足すように、リダイレクト処理が入っていました。(通常はリダイレクト処理は入っていません。意図的に入れてあるものです)
<IfModule mod_rewrite.c>
RewriteCond %{HTTP_HOST} ^{サイトのURL}
RewriteRule ^(.*) http://www.{サイトのURL}/$1 [R=301,L]
</IfModule>
この処理を取り除き、さらにデータベースのwp{prefix}_options
テーブル内のsiteurl
とhome
の値にもwww
が入ってたのでそれも取り除きます。
そうすると、問題なくサイトの新規追加が出来るようになりました。疲れました。
その代わり、リダイレクト処理を削除したのでhttp://www.~.jp
ではなく、http://~.jp
にURLが変わってしまいますけど。というか、今はもうwwwっていらないよね。
という事で色々と奮闘した結果、問題なくサブディレクトリ化ができましたとさ。
ただ、リダイレクト処理が入っているとサイト新規追加時に正常動作しない原因だけ分かってないので、どなたかご存知でしたら教えてください。