本番と同じサーバーで、誰にも見せずに新しいサイトを試す:確認用のサブドメインの作り方
Xserver に、本番と同じサーバーで試せる確認用のサブドメイン(ステージング環境)を作りました。ベーシック認証のアクセス制限、検索除けの X-Robots-Tag: noindex、親フォルダの WordPress の書き換えを効かせない RewriteEngine On、本番でしか確かめられないことの確かめ方までの手順です。

Xserver でステージング環境(本番に出す前に試す場所)を作るなら、本番と同じサーバーに確認用のサブドメインを作り、ベーシック認証でアクセスを制限し、X-Robots-Tag で検索エンジンに載せないようにするのが手堅い方法でした。親フォルダに WordPress がある時は、サブドメインの .htaccess に RewriteEngine On を書くと、親の書き換えが効かなくなります。
会社のサイトを WordPress から静的なサイトへ移す時、新しいサイトを、本番と同じレンタルサーバー(Xserver)の中に作った確認用のサブドメインに置いて試しました。この「リハーサル」で、本番に出す前に、サーバーの上でしか分からないことを確かめています。
移行の全体の流れは、別の記事に書きました。この記事では、確認用のサブドメインの作り方に絞って、手順と、気をつけたところを書きます。
ホームページ制作WordPress から静的サイトへ、社名で検索1位を守ったまま移行した全手順会社のサイトを WordPress から静的サイト(HTML のファイルを置くだけのサイト)へ移した全手順です。社名で検索1位を守るための 301 リダイレクトの洗い出し、バックアップ、誰にも見せないリハーサル、表示を止めない切り替えの順番、すぐ戻せる作りまでを、実際の手順書から書きます。
ステージング環境が要った理由:Mac で試すだけでは足りなかった
新しいサイトは、Mac の上でも動かして確かめていました。けれども、Mac で動いても、レンタルサーバーの上で同じように動くとは限りません。


そこで、本番と同じサーバーの中に、確認用のサブドメインを作りました。同じサーバーなので、PHP の設定も、メールの送り方も、キャッシュの仕組みも、本番と同じです。
確認用のサブドメインの作り方

サーバーパネルでサブドメインを作り、SSL を有効にする
サーバーパネルでサブドメインを作り、無料の SSL(https)を有効にします。
作ったフォルダの、実際の場所を確かめる
私たちは、フォルダは短い名前で作られると思い込んでいましたが、実際にはサブドメインの名前そのままのフォルダでした。ファイルを送る前に、実際の場所を必ず確かめます。
アクセス制限をかける
サーバーパネルの「アクセス制限」で、ID とパスワードを入れないと開けないようにします。パネルは、そのフォルダの .htaccess に、認証の行を書き足します。
確認用の .htaccess を置く
検索除け、親フォルダの書き換えの止め方、404 のページの設定を書きます(次の節)。
ファイルを送り、確かめる
新しいサイトのファイルを送り、curl とブラウザで確かめます(あとの節)。

確認用のフォルダの .htaccess
# アクセス制限の行は、サーバーパネルが書き足す。手では書かない
DirectoryIndex index.html index.php
Options -Indexes
ErrorDocument 404 /404.html
<IfModule mod_headers.c>
# 検索エンジンに載せない。エラーやパスワードの画面にも付けるため always
Header always set X-Robots-Tag "noindex, nofollow"
</IfModule>
<IfModule mod_rewrite.c>
# 親フォルダ(本番の public_html)の WordPress の書き換えを、このフォルダに効かせない
RewriteEngine On
</IfModule>
確かめ方
確かめるのは、Mac のターミナルからの curl です。サーバーに入る必要はありません。ID とパスワードは、変数に入れて使います。
curl -s -o /dev/null -w '%{http_code}\n' https://staging.example.com/
401
curl -s -o /dev/null -w '%{http_code}\n' -u "${ID}:${PW}" https://staging.example.com/
200
curl -sI -u "${ID}:${PW}" https://staging.example.com/no-such-page/ | grep -iE '^(HTTP|x-robots-tag)'
HTTP/2 404
x-robots-tag: noindex, nofollow
curl -s -o /dev/null -w '%{content_type}\n' -u "${ID}:${PW}" https://staging.example.com/img/sample.webp
image/webpこのほかに、お問い合わせのページにキャッシュを止める見出しが付いていること、お問い合わせから実際に1通送って届くことも、確認用のサイトで確かめました。それぞれの話は、別の記事に書いています。
ホームページ制作Xserver のサーバーキャッシュで、お問い合わせフォームが送れなくなる理由と対処Xserver のサーバーキャッシュに PHP のお問い合わせフォームが載ると、全員に同じ CSRF トークン(送信を確かめる「券」)が配られて送れなくなります。対処は Cache-Control: no-store, private を毎回返すこと。session_start の落とし穴と、本番で curl で確かめる方法まで。

本番に送る時に、確認用のフォルダを消さない
確認用のフォルダは、本番の公開フォルダの中にあります。本番にファイルを送る時、サーバーにだけあるファイルを消す送り方(rsync の --delete など)をすると、確認用のフォルダまで消えてしまいます。私たちは、--delete を使わない送り方にしています。

まとめ

- 本番と同じサーバーの中に、確認用のサブドメインを作って試す
- 作ったフォルダの実際の場所を、送る前に確かめる
- アクセス制限、検索除けの X-Robots-Tag、親の書き換えを止める RewriteEngine On を入れる
- メール、キャッシュ、ファイルの種類は、本番のサーバーで確かめる
この記事は、AI(Claude)の支援を受けて作成し、筆者が内容を確認しています。
