WordPressのインストールはサブディレクトリへ

WordPressをWeb公開ディレクトリ(以下ルート)直下にインストールしている人が多くいらっしゃるようです。
WordPressをルート直下にインストールしたくなる気持ちは分かります。 ですが、メリットがほぼないだけでなく、デメリットが多いです。
WordPressだけでなく、ソフトウェア(アプリケーション)をインストールするときは、サブディレクトリを作ってそこへインストールしましょう。
WordPressをルート直下にインストールするメリットとデメリットを見ていきます。

WordPressをサブディレクトリにインストールするとは

sample.desドメインのWeb公開ディレクトリがsample.des(お使いのサーバーによって異なります)で、その直下にWordPressをインストールするとします。
ディレクトリ・ファイル構造は、
sample.des
WordPressのphpファイル群
WordPressの.htaccessファイル(RewriteRuleが書かれている)
└WordPressのディレクトリ
このようになります。

ここへ別のソフトウェアAをsoftAディレクトリを作ってインストールするとします。
sample.des
WordPressのphpファイル群
WordPressの.htaccessファイル(RewriteRuleが書かれている)
└WordPressのディレクトリ
└softAディレクトリ
となり、softAディレクトリがWordPressの配下に入った形式になります。
これでは管理が面倒になります。 ソフトウェアが1つならまだ大丈夫かもしれませんが、後々わけが分からなくなりかねません。

そこで、wpディレクトリを作成して、そこへWordPressをインストールする場合を見てみます。
わかりやすくするため、wpディレクトリにしていますが、実際は推測しにくい名前の方がセキュアです。
sample.des
└wp
 └WordPressのphpファイル群
 └WordPressの.htaccessファイル(RewriteRuleが書かれている)
  └WordPressのディレクトリ
└softAディレクトリ
になります。
これでWordPressとソフトウェアAがそれぞれ独立した関係になります。

他のソフトウェアは使わないからルート直下に入れてもいいだろうと思われるかもしれませんが、良くありません。
今後別のソフトウェアを使わなければいけなくなるかもしれません。 絶対、絶対WordPressしか使わない、という場合でもサブディレクトリにインストールすることをお薦めします。

サブディレクトリにインストールしても直下に表示させる

サブディレクトリにインストールなんてしたら、WebページのURLが、
https://sample.des/wp/
になるから困ると思われる方もいらっしゃると思いますが、そこはRewriteRuleで解決できます。

https://sample.des/
に入ってきたアクセスを RewriteRuleを使って、
https://sample.des/wp/
へリダイレクトさせます。

つまり、
https://sample.des/
にアクセスがあったら、ブラウザのアドレスバーのURLはそのままで、
ブラウザには
https://sample.des/wp/
の内容を表示させます。

この方法は、お使いのレンタルサーバーが【.htaccess】によるRewriteRuleの使用を許可している場合にのみ使えます。 サーバーによっては、【httpd.conf】かもしれません。
使えない場合はルート直下にインストールしてください。ですが、サーバーを引っ越した方がいいかもしれません。

以下、2020年現在の修正状況です。
  1. 【index.php】を修正します。
    wpサブディレクトリ下にある【index.php】をローカルにダウンロード、
    require( dirname( __FILE__ ) . '/wp-blog-header.php' );

    require( dirname( __FILE__ ) . '/wp/wp-blog-header.php' );
    のようにWordPressをインストールしたサブディレクトリ名を追加して保存、sample.desディレクトリにアップロードします。 元のディレクトリとは違いますので、注意してください。

  2. 【.htaccess】を修正します。環境によっては、作成されていないこともあるようです。
    wpサブディレクトリ下にある【.htaccess】をローカルにダウンロード、
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /wp/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /wp/index.php [L]
    </IfModule>

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    のようにサブディレクトリ名を削除して保存、sample.desディレクトリにアップロードします。 元のディレクトリとは違いますので、注意してください。
    パーミッションの設定も忘れずに行ってください。

  3. この他に、ワードプレス管理画面内の【サイトUR】も変更するようです。

これらを行った後は、
sample.des
WordPressの.htaccessファイル(RewriteRuleが書かれている)
WordPressのindex.php
└wp
 └WordPressのphpファイル群
 └WordPressの.htaccessファイル(RewriteRuleが書かれている)
  └WordPressのディレクトリ
└softAディレクトリ
のようになります。

ルート直下にインストールするメリットは、この作業を行わずにすむことくらいです。
ですが、面倒だから、わからないから、とルート直下にインストールすると、後でもっとわかりにくい作業に遭遇する確率が高くなります。 めげずに頑張ってみてください。

WordPressが乗っ取られて加害者になる危険性

WordPressはオープンソースなので、誰でもWordPressのディレクトリ構造やファイルソースを見ることができます。 つまり、管理画面のURLが誰にでもわかり、またソースの脆弱性も丸わかりなのです。
その上、WordPressは世界中で多く使われているソフトウェアなので、悪意を持った人から狙われやすいのです。 これ以上の格好の餌食はないというわけです。

ルート直下にインストールすると、どこに何のファイルがあるか分かってしまうので、管理画面から不正ログインされたり、プログラムの脆弱性をつかれたりします。
管理画面へのログインを処理しているphpがadmin.php(実際のWordPressのファイル名とは異なります)の場合、
https://sample.des/admin.php
が管理画面のログインURLだと簡単に分かってしまいます。
ログインURLがわかれば、あとは解析ツールを使ってIDとパスワードを調べれば乗っ取れる確率が上がるということになります。
ログイン画面同様に、他のプログラムファイルも場所がわかるので、脆弱性をつかれる可能性が高まります。

乗っ取られたら、ページを書き換えられたり、ウィルスを仕込まれたり、踏み台にされたりしかねません。 ウィルスや踏み台は自分だけの被害にとどまらず、自分が加害者になってしまうこともあります。

サブディレクトリを作ってインストールしている場合、
https://sample.des/wp/admin.php
が管理画面のログインURLになります。
ディレクトリ名wpがわからなければ、ログイン画面にたどり着くことは難しくなります。
管理画面のログインURLを隠すことができるので、よりセキュアになります。
なのでWordPressをインストールするディレクトリ名も推測しにくい名前の方がよりセキュアです。 攻撃者は、WordPressやwpなどのディレクトリがあるだろうと推測して攻撃してきます。

WordPressには管理画面へのログインURLを変更する機能があるみたいなので、ぜひ変更して二重に隠してください。

バージョンアップが劇的に楽になる

WordPressのバージョンアップやプラグインのインストールって怖くないですか?
失敗すれば、ページにエラーが表示されたり、最悪の場合はページが真っ白になってしまいます。
そして元に戻すのに何日も泣きを見たり・・・

サブディレクトリにインストールしている場合、バージョンアップの恐怖がかなり和らぎます。
sample.des
WordPressの.htaccessファイル(RewriteRuleが書かれている)
WordPressのindex.php
└wp
 └WordPressのphpファイル群
 └WordPressの.htaccessファイル(RewriteRuleが書かれている)
  └WordPressのディレクトリ
└wp_new
 └WordPressのphpファイル群
 └WordPressの.htaccessファイル(RewriteRuleが書かれている)
  └WordPressのディレクトリ
のように、別のサブディレクトリを作成して、新しいバージョンのWordPressをインストールするのです。
wp_newディレクトリで、新しい環境を整え、十分にテストをしてから切り替えます。 wp_newディレクトリへの切り替えは、【.htaccess】と【index.php】の変更だけでできます。 もし問題が起こっても、【.htaccess】と【index.php】を元に戻すと、一瞬で以前の環境に戻ります。
もう1つWordPressをインストールするのが少し手間かもしれませんが、何日もページが真っ白、頭も真っ白に比べれば、手間ではないでしょう。

この時、
  1. 【wp】と【wp_new】で別のデータベースを用意する
  2. 【wp】と【wp_new】で同じデータベース内で別のテーブルを用意する
  3. 【wp】と【wp_new】で同じテーブルを読む
の3つが考えられますが、2は手間はかかるけどメリットはあまりないので、1か3だと思います。

データベースのバージョンが変わる場合は、1しかありません。 テーブルへのカラム追加など、テーブルへの変更がある場合も1が安心です。 この場合、記事などのデータは【wp】で使っているデータベースのバックアップから、【wp_new】で使うデータベースへリストアして移動させるといいでしょう。 リストアから切り替えまでに記事などに変更があった場合は、切り替え前にもう一度リストアすることをお忘れなく。

テーブルへの変更がない場合は3です。 同じデータベースへ接続するので手間はかかりません。
この場合、万が一インストーラーがテーブルやデータを消してしまってはいけないので、データベースのバックアップを確認してから行ってください。 バックアップは日頃から行っておられると思いますが、念には念を入れて直前のバックアップを確認してください。

プラグインやテーマのインストール時にも使えるので、ぜひやってみてください。