WordPressを /wordpress
サブディレクトリにインストールする構成は、 「メンテしやすい」「複数サイトを同居させやすい」「本体をいじらず切り離せる」など、 運用やセキュリティの面で多くの利点があります。
しかしこの構成だと、アクセスURLが https://example.com/wordpress/index.php
となってしまい、 ユーザーにとってはやや冗長で見栄えが悪くなることがあります。
本記事では、WordPressの物理的な設置場所を動かさずに、URLだけをスマートに見せる方法、 つまり https://example.com/index.php
で表示させる方法を、ApacheのVirtualHost構成で解説します。
Contents
想定読者
- サブディレクトリに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


コメント