概要
エックスサーバーで「本番ドメインはそのまま、検証用サブドメインだけ別バージョンのPHPやWordPressで動かしたい」というケースの実装手順とハマりどころをまとめます。
- PHPバージョン: サーバーパネルの「PHP Ver.切替」はドメイン+サブドメイン全体に一括適用されるため、サブドメイン単位で変えるには
.htaccess+php.fcgiラッパーが必要 - WordPressバージョン: コア自体はサーバーパネルでは変更不可。WP Downgrade プラグインで任意のバージョンに揃える
PHPバージョンをサブドメイン単位で切り替える(現行の正解)
1. php.fcgi ラッパースクリプトを作成
検証用サブドメインのドキュメントルート(index.php と同じ階層)に php.fcgi を新規作成します。
#!/usr/bin/sh
exec /usr/bin/php-fcgi8.1
- バージョンに応じてパスを書き換える(
php-fcgi7.4/php-fcgi8.0/php-fcgi8.1/php-fcgi8.2/php-fcgi8.3など) - 正確なパスは サーバーパネル → 「サーバー情報」→ 「コマンドパス一覧」で確認
2. php.fcgi のパーミッションを 755 に変更
FTPクライアントで右クリック → 属性変更 → 755 に設定します。
3. .htaccess の先頭に追記
# PHP version override (use php.fcgi wrapper)
Action myphp-script /php.fcgi
AddHandler myphp-script .php .html
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
WordPressが自動生成する # BEGIN WordPress 〜 # END WordPress ブロックの外に置きます。
4. 反映確認
1〜3分待ってから、phpinfo.php をルートに一時設置してアクセス。
<?php phpinfo(); ?>
PHP Version が指定値になっていればOKです。確認後は必ず削除してください(情報漏洩防止)。
5. 重要な前提条件:Xアクセラレータ
Xアクセラレータが「Ver.2」だとこの方式は機能しません。
サーバーパネル → 「Xアクセラレータ」を確認し、Ver.1 に切替するか、対象サブドメインのみOFFにしてください。
やってはいけない古い方法(情報漏洩リスクあり)
ネット上には以下のような古い記述が散見されますが、エックスサーバーの2023年前後の仕様変更で .htaccess から直接ハンドラ指定する方式は機能しなくなっています。
# これは動かない(PHPがソースコードのまま配信される)
AddHandler php81-script .php
この記述を入れると .php ファイルが PHPとして実行されず、ソースコード(DB認証情報を含む wp-config.php も)が平文で配信される危険な状態になります。
誤って追加した場合の対処:
- 即座に該当行を削除
- ブラウザで管理画面にアクセスできるか確認
- もし
wp-config.phpの中身が外に出た可能性があれば DB認証情報を即変更 - Basic認証でサブドメインを非公開化
WordPressのダウングレード(WP Downgrade プラグイン)
WP Downgrade の使い方
- プラグイン「WP Downgrade」をインストール・有効化
- 設定画面 → 「WordPress Target Version」に目的のバージョンを入力(例:
6.4.8) - 「変更を保存」
- ダッシュボード → 「更新」画面で WordPressの再インストールを実行
- wp-cli で確認:
wp core version
バージョン選定の目安
本番想定環境(ローカル開発環境の .wp-env.json の core 値など)と揃えるのが基本です。
自動更新を止めておく
ダウングレード後にWordPressが自動更新で最新版に戻らないよう、wp-config.php に追加します。
define( 'WP_AUTO_UPDATE_CORE', false );
WP Downgradeは target version を保持するため、仮に更新が走っても指定バージョンに戻る挙動ですが、二重に止めておくのが安全です。
ダウングレード後に「サイトに技術的な問題が発生しました」エラー(リカバリーモード)
WordPressをダウングレードすると、新しいバージョン依存で書かれているテーマ・プラグインが古いコアで致命的エラーを起こし、サイトが真っ白になり管理画面にもログインできない状態になることがあります。この場合、しばらくすると管理者メールアドレス宛に WordPress から以下のメールが届きます。
「あなたのサイトに技術的な問題が発生しています」
「サイトに技術的な問題が発生したことを伝えるメッセージがありました。WordPress には、サイトでプラグインやテーマが致命的なエラーを発生させた場合にそれを検知してこの自動メールでお知らせする機能があります。」
このメール本文に リカバリーモードのリンク(?action=enter_recovery_mode&... 付きURL)が含まれています。手順:
- メールを開き、リカバリーモードリンクをクリック
- リカバリーモード専用のログイン画面が表示されるので、通常の管理者アカウントでログイン
- WordPress管理画面に入れるので、エラーの原因となっているプラグイン/テーマを無効化または削除(古いバージョンに対応した版に差し替えるか、最新版でも動く軽量な代替プラグインに変更)
- 管理バーの「リカバリーモードを終了」ボタンで通常モードに戻る
メールが届かない・見つからない場合:
- 迷惑メールフォルダを確認
- SMTP未設定で送信失敗していることもある → サーバーの mail() ログを確認
- FTPで直接
wp-content/plugins/のプラグインフォルダ名を_disabled等にリネームして強制無効化 - それでもダメなら
wp-content/mu-plugins/を一時的に空にして読み込み停止
事前予防策: ダウングレード前に「使っているテーマ・プラグインが目的バージョンに対応しているか」を必ず確認しておく(各プラグインの「テスト済みバージョン」表記をチェック)。
検証環境セットアップの全体フロー
エックスサーバー本番ドメインの配下に「本番と異なるPHP/WPバージョン」の検証環境を作る場合の標準手順です。
- サブドメイン発行(例:
staging.example.com)— サーバーパネル → 「サブドメイン設定」 - Xアクセラレータ Ver.1 に切替 or 対象サブドメインのみOFF
- PHP切替(必要なら)— サーバーパネルではドメイン全体共通のため、異なるバージョンが必要なら fcgi方式を使用
- WordPress簡単インストール(最新版が入る)
- WP Downgrade で目的バージョンに調整
- Basic認証をサブドメインにかけて非公開化
- コンテンツ移行(All-in-One WP Migration 等)※ 移行ツールは wp-content + DB のみで、PHP/WPバージョンはコピーされない
- 動作確認:
wp core version/php -v
ハマりどころと注意点
| 症状 | 原因 | 対処 |
|---|---|---|
.php がソースコードのまま表示 | AddHandler php**-script は仕様変更で無効 | 該当行を削除 → php.fcgi + Action 方式に変更 |
| fcgi方式を入れたが反映されない | Xアクセラレータ Ver.2 が有効 | Ver.1 に切替 or 対象ドメインだけOFF |
| All-in-One WP Migration でPHP/WPバージョンも揃うと誤解 | 同ツールは wp-content + DB のみ | PHP/WPは個別に手順1〜3で揃える |
| サーバーパネルでPHP切替したら本番も変わってしまった | エックスサーバーは ドメイン+サブドメイン全体に適用 | サブドメイン単位は fcgi方式が必須 |
wp-config.php の中身が漏れた疑い | AddHandler 失敗時にソース露出 | DB認証情報を即変更、サブドメインBasic認証 |
まとめ
エックスサーバーで「本番に影響を与えずに検証環境を作る」場合、PHPは php.fcgi+.htaccess でサブドメイン分離、WordPressは WP Downgrade でバージョン制御、というのが2026年時点の現実解です。Xアクセラレータ Ver.2 の存在が罠なので、まずそこを確認してから作業に入ることをおすすめします。

コメント