スポンサーリンク

WordPressのマルチサイト(Multi site)でネットワーク管理画面(/wp-admin/network/)へログインできなくなってる場合

やっとわかった!
Wordpressのマルチサイトでサイトを作っていて、ネットワーク管理画面(/wp-admin/network/)へログインできなくなって長かったのだが、原因がようやくつかめた。
ログインができなくなっていた状況はというと、多数のリダイレクトが発生して、ブラウザがタイムアウトしてしまうのだ。

「このページは動作していません」
リダイレクトが繰り返し行われました

と表示される。
テスト環境に移しても同じような状態だ。テスト環境でもダメということは、サーバーの問題ではないようだ。プラグインも切ってみたが、変りない。
ただ、テスト環境を何度か作り直しているうちに直ったこともあった。やった!と思ったが、なにがどうやって直ったのかはわからずじまいで、本番環境を直すにはそこを知る必要がある。
テスト環境へ移すときに変更するのはドメイン名の変更だ。ドメイン名に問題がありそうだとだいたい目星はついていたが、長い間どう調べても糸口がつかめなかった。

[wordpress network redirect]などと検索していて、海外のサイトで以下のようなアンサーを何度か目にしていたのだが、よく読んでいなかった。
今日のような暇なときに腰を据えて読んでみると、ちゃんと説明してくれていることがわかる。

https://wordpress.stackexchange.com/questions/175728/redirect-loop-only-for-multisite-network-admin

There's another possible cause of the loop when trying to access:
/wp-admin/network/
There's a redirect triggered at the bottom of:
/wp-admin/network/admin.php
This checks that the current blog and current website have the same path and domain values, if they don't then the redirect occurs.
Double check that the path specified in the wp_blogs table is the same as the path set on the current site.
These values can end up out of sync, especially when installing the applications inside a directory, eg. /blog/

Andrew

簡単に要約すると「wp_blogs」にあるURLが正しくないとリダイレクトしてしまうよ、ということだ。
(the current blog and current website have the same path and domain values ここんとこね)

wp_blogs」がどこにあるかと言えば、データベースだ。テーブルの名前に「wp_blogs」というのがあって、Wordpressのリダイレクトは、そのURLと管理画面が同じパスであるかチェックするのだ。セキュリティの一つだね。

治し方 その1

データベースを編集する
phpMyAdminなどのデータベース編集ツールを使うのが早いだろう。サーバーの管理画面から使えることが多い。自前のサーバーだったらphpMyAdminからダウンロードしてきてインストールするとかになる。
もしくは、プラグインのバックアップツールなどでデータベースをダウンロードして、直接編集をしてもいい。シリアライズが必要な部分でもなさそうだからね。他の部分はダメだよ![s:4:...][s:12:...]みたいな記述があるところはシリアライズと言って文字数も関わってくるところなので、手で治すのは危ない。手間もかかるしリスクも大きいから、ツールを使った方が確実だ。

「wp_blogs」
phpMyAdminにて、データベースを覗いてみた。しかし「wp_blogs」には二つの行があるだけで、それぞれにドメインとディレクトリが正しく入っている…。問題はなさそうだ。いや待てよ、うーんやはりドメインとディレクトリが正しく入っている…。問題はなさそうだ。などと10回くらい繰り返したときだった。
ドメインに、wwwがついてねえ!
と気が付いたのだ。「www」つきのドメインに変えたら見事、ネットワーク管理画面に入れた。


↑赤くしたとこにあるドメインが間違っていないか確認。

ありがとう!Andrewさん!私のドメインの記述が間違っていました!どこでどうやって間違えたのかはわかりませんが、とにかく私が悪かったんです!ありがとう!…

「wp_site」
データベースを見て回ると、「wp_site」というテーブルも見つかった。ここにもドメインが「www」なしで記述されている。ついでにここも直しておいた。とくに影響はなさそうだ。もしなにかマズかったら、ここは元に戻そうと思う。

治し方 その2
こっちは治せるというよりかは、確認ができる、と言った方がいい。ちょっと力わざなものだ。

/wp-admin/network/admin.php

というファイルの中に、

wp_redirect( network_admin_url() );
exit;

という記述がある。一番下あたりだ。これを

//wp_redirect( network_admin_url() );
//exit;

と「//」でコメントアウトする。PHPはこれでとりあえず動作させないようにできる。
ここのプログラムは、Andrewさんが言ってた、同じドメインかチェックをするプログラムの部分なのだ。
とりあえずこの機能を切ってしまおう、ということだ。この2行をコメントアウトしたら、管理画面よりネットワーク管理画面に入ってみよう。とりあえずは入れるはずだ。

URLを確認
そこで「サイト」にあるマルチサイトで作った各ブログのURLを確認してみてほしい。どうだろうか?wwwがなかったり、正しいURLになっているだろうか?
もともとのブログは直せないが、追加したブログはURLの変更ができるはずだ。そこで治してもダメなら、やはりデータベースを直接直した方がいい。
URLが正しいか確認できるかできないかは心理的にはけっこうでかい。原因がわかれば進むことができる。

これでサイト全体にアップデートがかけられるようになったわけだ。アップデートをすると、サイトのアップグレードもしておこう。ネットワーク管理画面にあるから、探してくれ。すぐに見つかるはずだ。

スポンサーリンク