WebARENA SuiteXにWordPressを複数設置し、ファイルにパスが通らない場合の対応


この記事は2012年12月に掲載されたものです。
状況が変わったり、リンク先が変わっている可能性があります。

「WebARENA SuiteXのマルチドメインでWordPressのパーマリンク設定を変える方法」で、次のようにサブドメインを設定し、それぞれのサブドメインにWordPressをインストールする場合の.htaccessについて説明した。

example.com
sub1.example.com ⇒WordPressをインストール
sub2.example.com ⇒WordPressをインストール

このとき、すでに親ドメインにWordPressをインストールしていると、サブドメインのWordPressの挙動が不正になることがある。親ドメインのルート直下に、WordPress用のmod_rewriteを記述した.htaccessが存在する場合だ。私は次の状況で経験した。

example.com   ⇒WordPressをルート以外(/wpなど)にインストール
sub.example.com ⇒WordPressをルート以外(/wpなど)にインストール

親ドメイン・サブドメインとも、インストール先は専用ディレクトリ「wp」だが、「WordPress Codex 日本語版」に従い、ルートディレトリでWordPressを表示させている。どちらもパーマリンク設定をしているので、.htaccessが存在する。ディレクトリをツリー表示すると下記のようになる。

home(.htaccess設置)
├wp(.htaccess設置)⇒親ドメインのWordPress
│├wp-admin
│├wp-content
│└wp-includes
└sub.example.com(.htaccess設置)
 └wp(.htaccess設置)⇒サブドメインのWordPress
  ├wp-admin
  ├wp-content
  └wp-includes

WebARENA SuiteXは、サブドメイン名と同じディレクトリをルート直下に作成し、そこにコンテンツを置くことになっている。親ドメインのWordpressで使用するmod_rewriteが、ドメインルート直下の.htaccessに記述されているため、サブドメインもその影響を受けてしまうのだ。データベースの内容自体は表示されるのだが、スタイルシートが適用されず、管理画面にログインしようとすると、親ドメインの管理画面にリダイレクトされてしまう。

AddHandler application/x-httpd-php53 .php

# This file is made by RewriteRule Tool.

# Enable RewriteEngine.
RewriteEngine On

# 404 Error for Multidomain Directories.
RewriteCond %{HTTP_HOST} ^example.com$
RewriteCond %{REQUEST_URI} ^/(sub.example.com)/
RewriteRule ^(.*)$ /$1 [L,R=404]

# Main RewriteRule for multidomain.
RewriteCond %{HTTP_HOST} ^(sub.example.com)
RewriteCond %{REQUEST_URI} !^/(sub.example.com)/
RewriteRule ^(.*)$ /%{HTTP_HOST}/$1/index.php [L]

# 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>

# END WordPress

18~28行目は親ドメインのWordPress用のmod_rewriteなので、これが親ドメインだけに適用されるよう、RewriteCondで除外出来ないか試みたが、

RewriteCond %{HTTP_HOST} !^(sub.example.com)

RewriteCond %{REQUEST_URI} !^(sub.example.com)

をRewriteRuleの前に追加しても効果がない。

こうなったら最後の手段だ。データベースの内容自体は表示しているので、「wp-admin」「wp-content」「wp-includes」の各ディレクトリにパスが通っていないと考え、親ドメインのWordPressと同様にhomeから1階層目になるよう、「wp」ディレクトリを廃止してみた。

home(.htaccess設置)
├wp(.htaccess設置)⇒親ドメインのWordPress
│├wp-admin
│├wp-content
│└wp-includes
└sub.example.com(.htaccess設置)⇒サブドメインのWordPress
 ├wp-admin
 ├wp-content
 └wp-includes

なんということでしょう、正常に表示されたではないか。

ディレクトリやフォルダを上の階層に移動する場合、FFFTPには専用メニューはないが、右クリックの[名前変更(N)]で対応出来る。*1 サブドメインのルート直下のindex.phpは、もちろん初期状態に戻す。

require('./wp-blog-header.php');

管理画面で設定したWordPressアドレス(インストール先URL)は「sub.example.com/wp」のままなので、これはphpMyAdminでデータベースを直接修正した。「(接頭辞)+options」のテーブルを開き、「siteurl」を編集すればよい。

サブドメインとはいえ、ルート直下にファイルをばらまくのは抵抗があったが、いまのところ、これしか回避手段がない。

  1. 「FFFTPでディレクトリを上の階層に移動するには「../」を付けて名前変更する」参照。 []