マルチサイト化したWordPressの子サイトや管理画面がNot Foundになる場合の対処法

先日、WordPressのマルチサイト化のご依頼を受けまして、
テストサイトで動作検証をしていたところ、
設置した子サイトやダッシュボードが表示されなくなる。
というトラブルにハマってしまいました。

設置環境によって対処法が異なる可能性もありますが、
解消できた方法をメモしておきます。

WordPressのマルチサイト化

どうやら.htaccessの「RewriteRule」部分がおかしい

今回検証していたテストサイトは、

・さくらサーバー
・サブディレクトリタイプのマルチサイト
・ルートでは無くサブディレクトリ内にインストールしたWPでマルチサイト化

という条件で運用していたのですが、
管理画面や子サイトが表示されない事態に陥りました。

原因はマルチサイト化にしたときにWordPressが
「これを使いなさい」と表示してくれる.htaccessの記述が
不適切なものになっていたからでした。
RewriteRuleに書かれているパスに問題があったようです。

おそらく、開発者がサブディレクトリへのインストールを
考慮していないのではないかと思われます。

問題なのはWordPressが提示する.htaccess内で
下から4行目ぐらいにある下記の2行です。

[html]RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) WPへのパス $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ WPへのパス $2 [L][/html]

上記で「WPへのパス」と書いてある部分が、
本来必要とされるパスになっていませんでした。

今回の場合、hogehoge.comという独自ドメインを
hogehogeというフォルダに割り当てていて、その中にWPをインストールしていました。
さくらサーバーでは、「www/hogehoge/」というディレクトリ構成になります。

ダッシュボードや子サイトが表示されない原因はこの方法で解決しました。

そして、このときWordPressが吐き出したRewriteRuleは

[html]RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) hogehoge/$2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ hogehoge/$2 [L][/html]

になっているので、管理画面へのアクセスは本当は

●http://hogehoge.com/wp-adimin/network/…..

となるはずですが、このRewirteRuleだと

●http://hogehoge.com/hogehoge/wp-adimin/network/…….

にアクセスしようとするので
「そんなページはない!」とエラーが発生していたというわけです。
ですので、今回の場合はhogehoge/の部分が必要ないので、
その部分を削除して下記のようにすると

[html]RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L][/html]

無事正常に表示されるようになりました。
パスをどう編集するかはサーバーによって変わりますし、
マルチドメインのマルチサイトでは全く違う原因かもしれません。

ですが、同じやり方で解決できる可能性もゼロではないので
必要とする人のために解決した方法をメモしておきました。
WordPressのマルチサイト化でハマっている場合はご参考までに。

なお、設置条件により対処法が変わってきますが、
マルチサイト化の無料サポート等はやっておりませんので、
今回の対処法をご参考いただき、各自で対応をお願いいたします。
(執筆:めしお

●本日のまとめ
サブディレクトリのWordPressをマルチサイト化して運営する際に、
追加した子サイトやダッシュボードが表示されないトラブルに陥ったが、
.htaccessの記述内容を修正したところ表示されるようになった。