Defekte Bild-Uploads auf einer CloudPanel-Staging-Site im Unterordner (zum Beispiel domain.com/staging/) haben fast immer eine einzige Ursache: Die Standard-Nginx-Konfiguration von CloudPanel enthält Rewrite-Regeln für WordPress Multisite, die das Präfix /staging/ aus den Anfragen entfernen und deine neuen Bilder stattdessen im Ordner der Live-Site suchen. Die Lösung ist eine kurze Anpassung an zwei Rewrite-Regeln im Vhost deiner Site und dauert etwa zwei Minuten.
Warum sind neu hochgeladene Bilder auf einer CloudPanel-Staging-Site defekt?
Wenn du eine Staging-Site in einem Unterordner erstellst, sehen ihre URLs wie domain.com/staging/ aus. CloudPanel liefert eine Standard-Nginx-Konfiguration mit Rewrite-Regeln aus, die für WordPress Multisite gedacht sind. Diese Regeln fangen Anfragen an den Ordner /staging/ ab, entfernen das Präfix und lösen den Pfad gegen das Verzeichnis deiner Live-Site auf. Neu hochgeladene Bilder existieren nur im Staging-Ordner, deshalb findet Nginx sie nicht und liefert einen defekten Link oder einen 404 – obwohl der Upload selbst erfolgreich war.
Die Ursache liegt ausschließlich in den Nginx-Rewrite-Regeln. An WordPress, deiner Mediathek oder den hochgeladenen Dateien liegt es nicht.
Wie behebe ich defekte Bilder bei CloudPanel und Nginx?
Füge der Nginx-Konfiguration deiner Site eine Ausnahme hinzu, damit die Multisite-Rewrite-Regeln deinen Staging-Ordner überspringen. Die gesamte Änderung erfolgt im Vhost-Editor von CloudPanel und dauert etwa zwei Minuten.
Schritt 1: Öffne den Vhost-Editor deiner Site
- Melde dich in deinem CloudPanel-Dashboard an.
- Klicke auf die Website, auf der die Uploads fehlschlagen.
- Öffne den Tab Vhost im oberen Menü.
Schritt 2: Ersetze die Multisite-Rewrite-Regeln
Scrolle zum Abschnitt für statische Dateien. Er beginnt mit einer Zeile wie:
location ~* ^.+.(css|js|jpg|jpeg|gif|png...)$
Lösche innerhalb dieses Blocks diese beiden Standard-Rewrite-Zeilen:
# WordPress Multisite Subdirectory
rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 break;
rewrite ^/[_0-9a-zA-Z-]+(/.*.php)$ $1 break;Füge an ihrer Stelle diese aktualisierten Zeilen ein:
# WordPress Multisite Subdirectory (Excluding WP Staging)
rewrite ^/(?!staging)[_0-9a-zA-Z-]+(/wp-.*) $1 break;
rewrite ^/(?!staging)[_0-9a-zA-Z-]+(/.*.php)$ $1 break;Der Negative-Lookahead (?!staging) weist Nginx an, das Multisite-Rewrite auf jeden Ordner außer staging anzuwenden, sodass Anfragen nach deinen Staging-Bildern korrekt aufgelöst werden.
Schritt 3: Speichern und Nginx neu laden
Klicke unten rechts auf die Schaltfläche Save. CloudPanel lädt Nginx automatisch neu, und deine neu hochgeladenen Staging-Bilder funktionieren sofort.
Was, wenn mein Staging-Ordner nicht „staging" heißt?
Wenn deine Staging-Site in einem Ordner mit einem anderen Namen liegt – dev, test oder einem beliebigen anderen –, ändere das Wort staging in beiden Rewrite-Zeilen so, dass es deinem tatsächlichen Ordnernamen entspricht. Der Rest der Regel bleibt gleich.
Wird diese Lösung überschrieben?
Ja, wenn du im Vhost-Tab auf die Schaltfläche Reset to Default klickst. Diese Schaltfläche stellt die Standardkonfiguration von CloudPanel wieder her und entfernt die Ausnahme, sodass du diese beiden Zeilen danach erneut einfügen müsstest. Normale Updates von CloudPanel und WordPress berühren deinen gespeicherten Vhost nicht.
Häufig gestellte Fragen
Wirkt sich diese Änderung auf meine Live-Site aus?
Nein. Die Ausnahme (?!staging) ändert nur, wie Nginx Anfragen innerhalb des Staging-Unterordners weiterleitet. Anfragen an deine Live-Site entsprechen weiterhin unverändert der ursprünglichen Multisite-Regel.
Warum sind nur neu hochgeladene Bilder defekt und nicht ältere?
Die Standardregeln leiten Staging-Anfragen in deinen Live-Ordner um. Bilder, die du nach dem Erstellen der Staging-Site hochlädst, existieren nur im Staging-Upload-Ordner, deshalb findet Nginx sie dort nicht und liefert einen 404.
Ich verwende Apache, nicht Nginx. Gilt das auch?
Nein. CloudPanel liefert Websites mit Nginx aus, daher ist diese Lösung Nginx-spezifisch. Die hier gezeigte Rewrite-Syntax funktioniert nicht in einer Apache-.htaccess-Datei.
Muss ich nach dem Speichern etwas neu starten?
Nein. CloudPanel lädt Nginx für dich neu, wenn du auf Save klickst. Die Lösung ist aktiv, sobald der Neuladevorgang abgeschlossen ist.