Os uploads de imagens quebradas em um site de staging em subpasta no CloudPanel (por exemplo, domain.com/staging/) quase sempre têm uma única causa: a configuração padrão do Nginx no CloudPanel inclui regras de reescrita destinadas ao WordPress Multisite que removem o prefixo /staging/ das requisições e procuram suas novas imagens na pasta do site de produção. A solução é um ajuste rápido em duas regras de reescrita no Vhost do seu site e leva cerca de dois minutos.
Por que as imagens recém-enviadas ficam quebradas em um site de staging no CloudPanel?
Quando você cria um site de staging em uma subpasta, suas URLs ficam parecidas com domain.com/staging/. O CloudPanel fornece uma configuração padrão do Nginx com regras de reescrita pensadas para o WordPress Multisite. Essas regras interceptam as requisições à pasta /staging/, removem o prefixo e resolvem o caminho em relação ao diretório do seu site de produção. As imagens recém-enviadas existem apenas na pasta de staging, então o Nginx não as encontra e retorna um link quebrado ou um erro 404 — mesmo que o upload em si tenha funcionado.
A causa está unicamente nas regras de reescrita do Nginx. Não há nada de errado com o WordPress, com a sua biblioteca de mídia ou com os arquivos enviados.
Como corrijo as imagens quebradas no CloudPanel e no Nginx?
Adicione uma exclusão à configuração do Nginx do seu site para que as regras de reescrita do Multisite ignorem a sua pasta de staging. Toda a alteração é feita no editor de Vhost do CloudPanel e leva cerca de dois minutos.
Passo 1: Abra o editor de Vhost do seu site
- Faça login no seu painel do CloudPanel.
- Clique no site em que os uploads estão falhando.
- Abra a aba Vhost no menu superior.
Passo 2: Substitua as regras de reescrita do Multisite
Role até a seção de arquivos estáticos. Ela começa com uma linha como:
location ~* ^.+.(css|js|jpg|jpeg|gif|png...)$
Dentro desse bloco, exclua estas duas linhas de reescrita padrão:
# WordPress Multisite Subdirectory
rewrite ^/[_0-9a-zA-Z-]+(/wp-.*) $1 break;
rewrite ^/[_0-9a-zA-Z-]+(/.*.php)$ $1 break;Cole estas linhas atualizadas no lugar delas:
# WordPress Multisite Subdirectory (Excluding WP Staging)
rewrite ^/(?!staging)[_0-9a-zA-Z-]+(/wp-.*) $1 break;
rewrite ^/(?!staging)[_0-9a-zA-Z-]+(/.*.php)$ $1 break;O lookahead negativo (?!staging) instrui o Nginx a aplicar a reescrita do Multisite a todas as pastas exceto staging, de modo que as requisições às suas imagens de staging sejam resolvidas corretamente.
Passo 3: Salve e recarregue o Nginx
Clique no botão Save no canto inferior direito. O CloudPanel recarrega o Nginx automaticamente e suas imagens de staging recém-enviadas começam a funcionar imediatamente.
E se a minha pasta de staging não se chamar "staging"?
Se o seu site de staging estiver em uma pasta com outro nome — dev, test ou qualquer outro —, altere a palavra staging nas duas linhas de reescrita para corresponder ao nome real da sua pasta. O restante da regra permanece igual.
Esta correção será sobrescrita?
Sim, se você clicar no botão Reset to Default na aba Vhost. Esse botão restaura a configuração padrão do CloudPanel e remove a exclusão, então você precisaria reaplicar estas duas linhas depois. As atualizações normais do CloudPanel e do WordPress não alteram o seu Vhost salvo.
Perguntas frequentes
Esta alteração afeta o meu site de produção?
Não. A exclusão (?!staging) muda apenas como o Nginx encaminha as requisições dentro da subpasta de staging. As requisições ao seu site de produção continuam correspondendo à regra original do Multisite, sem alterações.
Por que apenas as imagens recém-enviadas ficam quebradas, e não as antigas?
As regras padrão enviam as requisições de staging para a sua pasta de produção. As imagens que você envia depois de criar o site de staging existem apenas na pasta de uploads de staging, então o Nginx não as encontra lá e retorna um erro 404.
Eu uso Apache, não Nginx. Isto se aplica?
Não. O CloudPanel serve os sites com Nginx, então esta correção é específica do Nginx. A sintaxe de reescrita mostrada aqui não funciona em um arquivo .htaccess do Apache.
Preciso reiniciar algo depois de salvar?
Não. O CloudPanel recarrega o Nginx para você quando você clica em Save. A correção fica ativa assim que o recarregamento termina.