[WordPress] サブディレクトリ型マルチサイトで新規サイトが「リダイレクトループ」で開かないときの対処
タイトル通りの問題が生じたので忘れないうちにメモしておきます。
なお、当方は全くの素人のため発生した問題の「なぜ?」には答えられませんm(_ _)m
状況
- 現在WordPressのバージョンは 3.9.2–ja
- 元々サブディレクトリ型のマルチサイトの設定済み
- これまではホームディレクトリ(mogi2fruits.net)のみでサイト運営
- 新たに新規サイトを追加し、URLは mogi2fruits.net/new(仮)とした
- 新規サイトそのものもダッシュボードも「このウェブページにはリダイレクトループが含まれています」となり開くことができない
関連してそうなプラグイン
【理由】
以下に紹介する参考記事によりサーバーの ~/public_html/ にある .htaccess ファイルが関係している可能性が高く、上記プラグインによるものと思われる記述があったため。
参考サイト
◆WordPressで複数のサイトを運用する(サブディレクトリ型) | WordPressならファーストサーバ(マルチサイト構築参考)
◆Wpマルチサイト化(サブディレクトリ型)はめちゃ簡単!初心者のハマリポイントは2箇所だけ!
◆このウェブページにはリダイレクト ループが含まれています|WEB SNS 活用マーケティング
◆WordPressをマルチサイトに対応させる場合の注意点|ふにろぐ
.htaccessファイルの確認・編集
編集前の内容
#####phpversion##### AddHandler x-httpd-php5.3 .php .phps #####end:phpversion##### # BEGIN W3TC Browser Cache <IfModule mod_deflate.c> <IfModule mod_headers.c> Header append Vary User-Agent env=!dont-vary </IfModule> AddOutputFilterByType DEFLATE text/css text/x-component application/x-javascript application/javascript text/javascript text/x-js text/html text/richtext image/svg+xml text/plain text/xsd text/xsl text/xml image/x-icon application/json <IfModule mod_mime.c> # DEFLATE by extension AddOutputFilter DEFLATE js css htm html xml </IfModule> </IfModule> # END W3TC Browser Cache # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> 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] # END WordPress
編集後の内容(失敗)
ネットワーク管理者のダッシュボード → 設定 → ネットワークの設置(上画像)
画面下部の「ステップ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]
この場合、「サーバーの PHP バージョンは 5.1.6 ですが WordPress 3.9.2 は 5.2.4 以上のみでご利用になれます。」とのメッセージが表示され閲覧もログインもできない。
編集後の内容(成功)
元々の .htaccess の頭にPHPのバージョンに関する記述があったのでこれを残す形で編集。内容は以下の通り。なお1~3行目の記述がいつ、何によって追記されたかは不明。
#####phpversion##### AddHandler x-httpd-php5.3 .php .phps #####end:phpversion##### 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]
この内容に書き換えた後、閲覧もログインも正常になった。
W3 Total Cache を削除できないトラブルに対処
しばらくするとまた同じようなエラーが生じる(エラーメッセージは記録忘れ)。
.htaccessを見てみると「W3 Total Cache」が追記した後が見られる。削除して内容を元に戻すと一旦は正常に戻るがすぐ書き換えられてしまう。WordPressのダッシュボードからプラグインを削除しようとしてもエラーが出てしまう。
対処として.htaccessファイルの内容を元に戻した後、属性を変更して書き込み不可にした。これにより「W3 Total Cache」による書き換えを阻止することができる。
ダッシュボードに正常にログインできた後、「W3 Total Cache」を削除。その後エラーは生じなくなった。