各WPのwp-config.phpを一つ上の階層に移動するとなると、ファイル名が被ってしまうと思うのですが、複数WordPressをインストールしている場合この方法はできないということでしょうか?
はい、できません。そもそも、このインストール形態では、
wp-config.php を1つ上の階層(非公開ディレクトリ)へ移動
ができません。
config.php を非公開ディレクトリに置く、というのは、たとえば、次のようなことをいいます。Codex の想定に従うと、
+--www--+--wp-admin
|
+--wp-content
|
+--wp-includes
|
+-index.php
|
+-wp-config.php
この状態で、
+--www--+--wp-admin
| |
| +--wp-content
| |
| +--wp-includes
| |
| +-index.php
|
+--wp-config.php
のようにするわけです。WordPress は www 直下にインストールしてあって、wp-config.php は www ディレクトリと同じ階層にあるということですね。ここにあるファイルは、php なら読めるけれども、ウェブサーバ(たとえば、Apache)はアクセスできません。
これがより安全であるという理由は、「ウェブサービスを通して、wp-config.php が閲覧されたり、ダウンロードされたりする心配がない」ということです。当然、いろいろな議論があって、Codex にもリンクがありますから、ご覧になるといいと思います。
一方、kitaguni_ht さんのインストール状態では下のようになっています(WP3は省略しました)。
www--+--WP1--+--index.php
| |
| +--wp-config.php
|
+--WP2--+--index.php
| |
| +--wp-config.php
|
+--.htaccess
これを、
www--+--WP1--+--index.php
|
+--wp-config.php
|
+--WP2--+--index.php
| |
| +--wp-config.php
|
+--.htaccess
のようにすることができます。WP1 または WP2 ディレクトリの1つ上なので、Codex の例ように www と同じ階層には移せません。このとき、ウェブサーバがアクセスできる、できないということだけを考えると、どちらもアクセスできる場所なので、安全性が増すということはありません。また、kitaguni_ht さんがおっしゃるように、ファイル名が同じなので、一つしか置けません。理由は簡単で、WordPress でそのようにコーディングされているからです。
WordPress は index.php にアクセスがあると、次の順序でファイルを読みます。
index.php -> wp-blog-header.php -> wp-load.php -> wp-config.php
wp-load.php の冒頭近くにこんな部分があります。
if ( file_exists( ABSPATH . 'wp-cofing.php') ) {
require_once( ABSPATH . 'wp-config.php' );
} elseif ( file_exists( dirname(ABSPATH) . '/wp-config.php' ) && !file_exists( driname(ABSPATH) . 'wp-settings.php' ) ) {
require_once( dirname(ABSPATH) . '/wp-config.php' );
} else {
インストールプロセスに入る
}
コードにはコメントつけられていて、下のようなことが書いてあります。
- もし、WordPress がインストールされたディレクトリに wp-config.php があれば、それを読み込む。
- それがなくて、一つ上のディレクトリに wp-config.php があり、wp-settings.php がなければ、その wp-config.php を読み込む。
- どちらもなければ、インストールを開始する。
この部分を変えればどこからでもファイルを読み込めますが、コアファイルをいじると後のメンテナンスが面倒なので、お勧めしません。wp-config.phpはアップグレードの時でも書き換えられないことが保証されているので、これを2段階にして、別の場所からパスワードなどを読み込むという手段もありますが、気分の問題のような気がします。
ということで、Codexのお勧めは、
- wp-config.php のパーミッションを 0400 にする(ファイルの所有者以外はアクセス禁止)。
- .htaccess で全てのアクセスを禁止する。(kigaguni_ht さんの書かれた通りです)
となります。1はウェブサーバではなくて、サーバにある全てのプログラム、root を除く全てのユーザが禁止対象になります。共用サーバで、たとえ隣からシンボリックリンクを張られても、読まれる可能性は少ないと言えます。2は、勿論、Apache だけにしか作用しません。それぞれ別のことをやっているので、できればどちらも設定するのがよいと思います。