WordPressをサブディレクトリに設置したまま、ドメイン直下にスマート表示させる設計術【VirtualHost構成】

サーバー
スポンサーリンク

WordPressを /wordpress サブディレクトリにインストールする構成は、 「メンテしやすい」「複数サイトを同居させやすい」「本体をいじらず切り離せる」など、 運用やセキュリティの面で多くの利点があります。

しかしこの構成だと、アクセスURLが https://example.com/wordpress/index.php となってしまい、 ユーザーにとってはやや冗長で見栄えが悪くなることがあります。

本記事では、WordPressの物理的な設置場所を動かさずに、URLだけをスマートに見せる方法、 つまり https://example.com/index.php で表示させる方法を、ApacheのVirtualHost構成で解説します。

想定読者

  • サブディレクトリにWordPressを置いたが、ドメイン直下で公開したい人
  • XserverやVPS環境で初めてWordPressを構築している人

環境

  • Ubuntu 24.04 LTS
  • Apache 2.4.58
  • WordPress 6.5.4

 なぜ index.php をコピーせずに Apache で制御するのか?

index.php をルートにコピーして中身を書き換える方法は、WordPress公式にも紹介されている簡易手法です。

ただし、

  • WordPressのアップデートで本体の構造が変わった場合に追従しにくい
  • メンテ時に「コピーしたのを忘れてた」というヒューマンエラーが起きやすい
  • サブディレクトリ構成を他サイトと共有していく場合、煩雑になる

といった理由から、本質的にはWebサーバーで制御した方が安全・確実です。


ApacheでWordPress用のVirtualHostを設定するには

① ファイル名は自由だけど分かりやすく

記事に登場する .conf ファイル名(例:wordpress.conf)はあくまで一例です。
実際には、自分のサイトや目的に応じて適当な名前をつけてOKです。例えば:

用途推奨される例
WordPressサイトwordpress.conf
サブドメインblog.example.com.conf
ポート別設定site-ssl.conf

作成場所は必ず以下のディレクトリです:

/etc/apache2/sites-available/

② 新規VirtualHostファイルの作成手順

以下のようにして設定ファイルを新規作成します:

sudo nano /etc/apache2/sites-available/wordpress.conf

中身は記事の構成例を参考に、自分の環境に合わせて編集します。
例:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html/wordpress

    <Directory /var/www/html/wordpress>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/wordpress_error.log
    CustomLog ${APACHE_LOG_DIR}/wordpress_access.log combined
</VirtualHost>

③ 作成したサイトを有効化する

sudo a2ensite wordpress.conf

このコマンドで sites-enabled/ にシンボリックリンクが作られ、Apacheに認識されます。


④ 必要に応じてデフォルトを無効化(任意)

sudo a2dissite 000-default.conf

ポートやドメインが競合しないなら、無効化しなくても大丈夫ですが、WordPressのサイトだけにしたい場合は無効化推奨


⑤ Apacheの再起動

sudo systemctl reload apache2

💡補足:複数サイトの運用にも対応

この方法を使えば、1台のサーバーに複数のドメインやサブドメインを設定できます(バーチャルホスト機能)。


 実際の構成例(Apache VirtualHost)

HTTP(ポート80)

<VirtualHost *:80>
    ServerName rm-engineering.info
    Redirect permanent / https://example.com/
</VirtualHost>

HTTPS(ポート443)

<VirtualHost *:443>
    ServerName example.com

    DocumentRoot /var/www/html/wordpress
    DirectoryIndex index.php index.html

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.como/privkey.pem
    Include /etc/letsencrypt/options-ssl-apache.conf

    <Directory /var/www/html/wordpress>
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/example-error.log
    CustomLog ${APACHE_LOG_DIR}/example-access.log combined
</VirtualHost>

このように、Apacheレベルで /wordpress をルートとしてマウントすることで、 ユーザーからは https://example.com にアクセスしているように見えつつ、 実体は /var/www/html/wordpress 配下のWordPressがそのまま動作します。


Apacheのモジュールが有効か確認しよう

以下のモジュールが有効になっていない場合、設定が反映されないことがあります:

  • rewrite(パーマリンク・リダイレクト)
  • ssl(HTTPS通信)
  • headers(CDNやキャッシュ制御を使うとき)

以下のコマンドで有効化できます:

sudo a2enmod rewrite ssl headers
sudo systemctl restart apache2

a2enmod はDebian/Ubuntu系(Xserver VPSなど)でのコマンドです。


.htaccess のリダイレクトはどうする?

以前 /wordpress/ へのリダイレクトを .htaccess で設定していた場合、 Search Console 上で「リダイレクトがあります」と警告が出る可能性があります。

その場合は以下のような .htaccess のリダイレクト記述を コメントアウト するだけでOKです:

# RewriteEngine On
# RewriteCond %{REQUEST_URI} ^/wordpress/
# RewriteRule ^wordpress/(.*)$ https://example.com/$1 [R=301,L]

WordPress内のURLやリンクはどうなる?

https://example.com/wordpress/index.phpの設定から変更した場合、投稿や固定ページの中で /wordpress/ を含んでいないかをチェックしましょう。 一括チェックには wp_posts テーブルに対してSQLを投げて確認するのが確実です。 ただし、多くのテーマやエディタでは site_url() などで自動解決されるため、 特別なリンクや画像を手書きしていなければ問題ない場合がほとんどです。


まとめ:シンプルな見た目と、拡張性の高い設計を両立

  • WordPress本体は /wordpress のまま、メンテ性・拡張性を確保
  • URLは https://example.com のようにスッキリ見せてUX向上
  • ApacheのVirtualHost設定だけで、構造的にスマートなサイト設計が可能に

「コピーして調整」ではなく「設計で解決」することで、将来のトラブルを未然に防ぐ構成管理を実現しましょう。

PR

コメント

タイトルとURLをコピーしました