WordPress 3.5 をマルチサイト化したらループ地獄に陥ったので直す。

たぶんこれはWordPressの所為ではなくて、ネットワークの設定あたりがおかしいような気もするのですが、とりあえずサーバの設定をいじるよりもWordPressのほうをいじったほうが早いので、そうする。

症状 …

  • ローカルのUbuntuにWordPress 3.5 をインストール。
  • 3.5 からは「サブディレクトリ内にマルチサイトを設置できる」ということなので、そうする。
  • マルチサイトは「サブディレクトリ形式」。
    つまり、物理的には
    • 公開ディレクトリ:/home/my_dir/public_html/
    • WordPressをインストールした場所:/home/my_dir/public_html/wp/
    で、子サイト "sub" を作成する。

    このサーバのホスト名が ubuntu.local だとすれば、
    • http://ubuntu.local/ で、/home/my_dir/public_html/ が見える。
    • http://ubuntu.local/wp/ で、親サイト表示。
    • http://ubuntu.local/wp/sub/ で、子サイト "sub" を表示。
    となる筈なのだけれど…
  • メインサイトの管理画面には問題無くアクセス可能。サイト表示も問題無し。
  • 子サイトの表示は問題あり。スタイルシートなど、外部ファイルが上手く読み込まれない。各外部ファイルへのリダイレクトがループしている模様。
  • 子サイトの管理画面にはアクセスできず「Internal Server Error」になる。リダイレクトがループしている模様。

さて。

リダイレクトがうまく行っていないっぽいので、その辺りの設定を見てみる。

ワードプレスでマルチサイト設定を有効にしたときに「これを .htaccess に書いてね」と言われる、素の内容はこんな感じ。

RewriteEngine On
RewriteBase /wp/
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).*) wp/$2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ wp/$2 [L]
RewriteRule . index.php [L]

うん。

本当は http://ubuntu.local/wp/sub/wp-admin/ にアクセスした時は http://ubuntu.local/wp/wp-admin/ を見てほしいのだけれど、これだと /wp/sub/wp-admin/ -> /wp/wp/wp-admin/ -> /wp/wp/wp/wp-admin/ -> /wp/wp/wp/wp-admin/ … と無限にリダイレクトされてしまいそうです。

なので、 11,12行めを

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

としてやれば、たぶん無限ループを回避でき、無事にワードプレスを使うことが出来るようになると思うのだけれどどうだろう。うちはこの設定で、いまのところは特に問題はないのだけれど。

カテゴリ: