先日、WordPressのマルチサイト化のご依頼を受けまして、
テストサイトで動作検証をしていたところ、
設置した子サイトやダッシュボードが表示されなくなる。
というトラブルにハマってしまいました。
設置環境によって対処法が異なる可能性もありますが、
解消できた方法をメモしておきます。
どうやら.htaccessの「RewriteRule」部分がおかしい
今回検証していたテストサイトは、
・さくらサーバー
・サブディレクトリタイプのマルチサイト
・ルートでは無くサブディレクトリ内にインストールしたWPでマルチサイト化
という条件で運用していたのですが、
管理画面や子サイトが表示されない事態に陥りました。
原因はマルチサイト化にしたときにWordPressが
「これを使いなさい」と表示してくれる.htaccessの記述が
不適切なものになっていたからでした。
RewriteRuleに書かれているパスに問題があったようです。
おそらく、開発者がサブディレクトリへのインストールを
考慮していないのではないかと思われます。
問題なのはWordPressが提示する.htaccess内で
下から4行目ぐらいにある下記の2行です。
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) WPへのパス $2 [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ WPへのパス $2 [L]
上記で「WPへのパス」と書いてある部分が、
本来必要とされるパスになっていませんでした。
今回の場合、hogehoge.comという独自ドメインを
hogehogeというフォルダに割り当てていて、その中にWPをインストールしていました。
さくらサーバーでは、「www/hogehoge/」というディレクトリ構成になります。
ダッシュボードや子サイトが表示されない原因はこの方法で解決しました。
そして、このときWordPressが吐き出したRewriteRuleは
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) hogehoge/$2 [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ hogehoge/$2 [L]
になっているので、管理画面へのアクセスは本当は
●http://hogehoge.com/wp-adimin/network/…..
となるはずですが、このRewirteRuleだと
●http://hogehoge.com/hogehoge/wp-adimin/network/…….
にアクセスしようとするので
「そんなページはない!」とエラーが発生していたというわけです。
ですので、今回の場合はhogehoge/の部分が必要ないので、
その部分を削除して下記のようにすると
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
無事正常に表示されるようになりました。
パスをどう編集するかはサーバーによって変わりますし、
マルチドメインのマルチサイトでは全く違う原因かもしれません。
ですが、同じやり方で解決できる可能性もゼロではないので
必要とする人のために解決した方法をメモしておきました。
WordPressのマルチサイト化でハマっている場合はご参考までに。
なお、設置条件により対処法が変わってきますが、
マルチサイト化の無料サポート等はやっておりませんので、
今回の対処法をご参考いただき、各自で対応をお願いいたします。
(執筆:めしお)
●本日のまとめ
サブディレクトリのWordPressをマルチサイト化して運営する際に、
追加した子サイトやダッシュボードが表示されないトラブルに陥ったが、
.htaccessの記述内容を修正したところ表示されるようになった。
この記事へのコメント
2日徹夜で悩んだことが、お蔭様で、この書き込みで解決できました。神様にめぐり合った気持ちです。誰にも相談できず苦しんでおりましたが、解決でき肩の荷が降りました。感謝に耐えません。お体にご留意されまして、益々のご活躍を祈念しております。
おさきさん
ありがとうございます。お役に立てたようで良かったです。
助かりました!
こちらもサクラで同じ現象に陥っておりました。
こちらの記事通り作業をしたら、無事に動作することができました。
ありがとうございます。
たけしさん、良かったです!さくらの場合はドンピシャの記事ですね。
失礼します。今マルチサイトにしてログインできないエラーになりましたが、何かアドバイスありましたら、よろしくお願いします。
・サイトネットワーク管理ダッシュボード : ログインできない。
・親サイトダッシュボード : ログインできない。
・子サイトダッシュボード : ログインできる。
.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]
ごめんなさい。
備忘録として残しただけなので、アドバイス等は受け付けていないのです。
諦めかけようとしてた時に、このサイトに出会いました。
感謝いたします。