CloudPanel(Nginx)で画像アップロードの不具合を修正する

CloudPanel のサブフォルダー・ステージングサイト(例:domain.com/staging/)で新しくアップロードした画像がリンク切れや404になる原因は、ほぼ1つに絞られます。CloudPanel のデフォルトの Nginx 設定には WordPress マルチサイト用のリライトルールが含まれており、これがリクエストから /staging/ プレフィックスを取り除き、新しい画像を本番サイトのフォルダー内で探してしまうのです。解決策はサイトの Vhost にある2つのリライトルールを少し書き換えるだけで、約2分で完了します。

なぜ CloudPanel のステージングサイトで新しい画像が表示されないのか?

サブフォルダーにステージングサイトを作成すると、その URL は domain.com/staging/ のようになります。CloudPanel は WordPress マルチサイト向けのリライトルールを含むデフォルトの Nginx 設定を提供します。これらのルールは /staging/ フォルダーへのリクエストを横取りし、プレフィックスを取り除いて、パスを本番サイトのディレクトリに対して解決します。新しくアップロードした画像はステージングフォルダーにしか存在しないため、Nginx はそれらを見つけられず、アップロード自体は成功していてもリンク切れや404を返します。

原因は Nginx のリライトルールだけにあります。WordPress、メディアライブラリ、アップロードされたファイルには問題ありません。

CloudPanel と Nginx で画像のリンク切れを直すには?

Nginx 設定に除外ルールを追加し、マルチサイトのリライトルールがステージングフォルダーをスキップするようにします。すべての変更は CloudPanel の Vhost エディターで行い、約2分で完了します。

ステップ1:サイトの Vhost エディターを開く

  1. CloudPanel ダッシュボードにログインします。
  2. アップロードに問題が起きているウェブサイトをクリックします。
  3. 上部メニューの Vhost タブを開きます。

ステップ2:マルチサイトのリライトルールを置き換える

静的ファイルのセクションまでスクロールします。次のような行で始まります:

location ~* ^.+.(css|js|jpg|jpeg|gif|png...)$

そのブロック内で、次の2つのデフォルトのリライト行を削除します:

  # WordPress Multisite Subdirectory
  rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 break;
  rewrite ^/[_0-9a-zA-Z-]+(/.*.php)$ $1 break;

その場所に、更新した次の行を貼り付けます:

  # WordPress Multisite Subdirectory (Excluding WP Staging)
  rewrite ^/(?!staging)[_0-9a-zA-Z-]+(/wp-.*) $1 break;
  rewrite ^/(?!staging)[_0-9a-zA-Z-]+(/.*.php)$ $1 break;

否定先読み (?!staging) は、staging 以外のすべてのフォルダーにマルチサイトのリライトを適用するよう Nginx に指示します。これにより、ステージング画像へのリクエストが正しく解決されます。

ステップ3:保存して Nginx を再読み込みする

右下の Save ボタンをクリックします。CloudPanel が自動的に Nginx を再読み込みし、新しくアップロードしたステージング画像がすぐに表示されるようになります。

ステージングフォルダーの名前が「staging」でない場合は?

ステージングサイトが devtest など別の名前のフォルダーにある場合は、両方のリライト行にある staging という語を、実際のフォルダー名に合わせて変更してください。ルールの残りの部分はそのままです。

この修正は上書きされますか?

はい、Vhost タブの Reset to Default ボタンをクリックすると上書きされます。このボタンは CloudPanel の標準設定を復元して除外ルールを削除するため、その後この2行を再度適用する必要があります。CloudPanel や WordPress の通常のアップデートでは、保存した Vhost は変更されません。

よくある質問

この変更は本番サイトに影響しますか?

いいえ。(?!staging) の除外ルールは、ステージングのサブフォルダー内でのリクエストの振り分け方だけを変更します。本番サイトへのリクエストは、これまでどおり元のマルチサイトルールに一致します。

なぜ古い画像ではなく、新しくアップロードした画像だけが表示されないのですか?

デフォルトのルールはステージングのリクエストを本番フォルダーへ送ります。ステージングサイトを作成した後にアップロードした画像はステージングのアップロードフォルダーにしか存在しないため、Nginx はそこで見つけられず404を返します。

Nginx ではなく Apache を使っています。これは当てはまりますか?

いいえ。CloudPanel はサイトを Nginx で配信するため、この修正は Nginx 専用です。ここで示したリライト構文は Apache の .htaccess ファイルでは機能しません。

保存後に何か再起動する必要はありますか?

いいえ。Save をクリックすると CloudPanel が Nginx を再読み込みします。再読み込みが完了すると同時に修正が有効になります。

関連記事

Updated on 6月 8, 2026

Alaa Salama

著者: Alaa Salama

私は10年以上にわたりサポート分野で働いてきました。テクノロジーの中でも、人に寄り添う部分に大きなやりがいを感じているからです。複雑なWordPressの問題を解決するときも、ワークフローを効率化するためにカスタムプラグインやコードスニペットを開発するときも、私の目標は常に摩擦を減らし、人々がよりスマートに働けるようにすることです。自分が作った解決策によって、誰かの一日が少しでも良くなるのを見ることほど嬉しいことはありません。

オフラインのときでも、たいてい何かの「内部」をいじっています。サーバーの最適化やDIY電子工作に情熱を持っており、自由な時間にはスマートホームのプロジェクトやハードウェアの修理に取り組むことがよくあります。特に大切にしているのは、子どもたちと自宅の作業場で過ごす時間です。家の修理からクリエイティブなプロジェクトまで一緒に取り組みながら、長く使えるものを作る楽しさを育んでいます。