wp-config.php の置き場所


wp-config.php は、データベースに接続するための情報の他WordPressの動作に影響を与える重要な内容を記載するファイルです。WordPress3.5のコア解析をしていると、この wp-config.php の置く場所が2カ所から選択できることがわかりました。その処理を少しみていきます。

wp-config.php の置ける場所

  1. wp-load.php と同階層
  2. wp-load.phpより1つ上の親階層

wp-config.php ファイルの置き場所は、wp-load.php ファイルと同階層(※画像の②)かwp-load.php ファイルより1つだけ上の親階層(※画像の①)になります。親階層に置く場合は必ず1つだけ上の階層でそれより上になっても読まれません。また①と②の両方の場所に置いた場合、②のwp-config.phpが優先されます。

※親階層に移動できるのはwp-config.php だけです。他のファイルは移動させてはいけません。

公式オンラインマニュアルCodexでは

wp-config.php の編集」ページからの引用

自分の WordPress のルートディレクトリ(フォルダ)にある wp-config-sample.php ファイルを同じディレクトリ内に複製して、ファイル名を wp-config.php に変更します。

wp-config-sample.php (※wp-load.phpと同ディレクトリ内にある) は、WordPressをダウンロードした直後にあるファイルです。wp-config-sample.phpと同ディレクトリにwp-config.phpを作るように記載されています。

Hardening WordPress」ページからの引用

wp-config.php ファイルを、WordPress をインストールした階層の一つ上に移動することができます。ウェブスペースのルートにインストールしている場合、wp-config.php をウェブルートの外側に格納できます。wp-config.php が、WordPress (wp-includes のある場所) インストールの一つ上のディレクトリに格納できることに注意してください。また、あなた (とウェブサーバー) だけがこのファイルを閲覧可能 (通常はパーミッション400または440) にしてください。

セキュリティ向上のために一つ上の階層に移動可能と記載されています。ただし、一つ上の階層に移動させてセキュリティが向上するのはウェブルートにインストールしている場合です。サブディレクトリを作ってそこにWordPressをインストールした場合はセキュリティ向上しません。

なぜ一つ上に移動する?

Codexでもセキュリティの項目でwp-config.phpの移動について記載されています。ウェブルートにWordPressをインストールしている場合、ウェブルートより一つ上の階層はURLで指定してアクセスできない領域になります。そこにwp-config.phpを置くことにより外部からURLで直接ファイルにアクセスできなくなります。

外部からの直接ファイルへのアクセスをできなくする

PHPファイルなので原則、ファイルの中身がそのまま表示されることはありません。しかしWEBサーバの設定間違いや.htaccessの記載ミスなどでPHPとして正常に認識しなくなればファイルの中身が見えてしまいます。wp-config.phpにはデータベース情報なども記載されてますので見えてしまっては大変なことになります。そもそもPHPとして認識しなくなったとしてもアクセスできない領域にあれば中身を見られる心配はありません。

注意事項

一つ上の階層にwp-config.phpを移動できるのはWordPress 2.6からです。それ以前は動作しません。また一部のプラグインでは動作しない場合もあるそうなのでプラグインの動作チェックはした方がいいかもしれません。

wp-config.php を読み込む処理コード

【wp-load.php】

/** Define ABSPATH as this file's directory */
define( 'ABSPATH', dirname(__FILE__) . '/' );
if ( file_exists( ABSPATH . 'wp-config.php') ) {

	/** The config file resides in ABSPATH */
	require_once( ABSPATH . 'wp-config.php' );

} elseif ( file_exists( dirname(ABSPATH) . '/wp-config.php' ) && ! file_exists( dirname(ABSPATH) . '/wp-settings.php' ) ) {

	/** The config file resides one level above ABSPATH but is not part of another install */
	require_once( dirname(ABSPATH) . '/wp-config.php' );

} else {

例として /var/www/html/ にWordPressをインストールとしたとします。

  • 22行目でWordPressをインストールしたパス名を定数 ABSPATH で定義しています。
    __FILE__ でファイルのフルパスとファイル名を取得しています。例では /var/www/html/wp-load.php が取得されます。
    dirname は、ファイルあるいはディレクトリへのパスを含む文字列を受け取って、 親ディレクトリのパスを返します。 例ではdirname(‘/var/www/html/wp-load.php’) になるので /var/www/html が取得できます。
    最後に語尾に「/」を結合するので例では ABSPATH は /var/www/html/ になります。
  • 26行目で/var/www/html/wp-config.php が存在するかチェックし、存在すればwp-config.phpを読み込んでます。
  • /var/www/html/wp-config.php が存在しない場合に31行目の処理になります。
    dirname(ABSPATH) = dirname(‘/var/www/html/’) なので /var/www/ が取得できます。一つ上の階層になります。
    /var/www/wp-config.php にファイルが存在し 且つ /var/www/wp-settings.php にファイルが存在しない場合にwp-config.phpを読み込んでます。
まとめ

ウェブルートにWordPressをインストールしている場合、wp-config.php を一つ上の階層に移動させるだけの単純な作業です。これだけで少しはセキュリティ向上になるので興味がある人はぜひやってみてください!

「wp-config.php の置き場所」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です