Resolver problemas

Redirecionamento feito no cPanel não funciona

Revisto a 3 min de leitura dominios redirecciones

O cPanel guarda os redirecionamentos através de regras no .htaccess. Se ficarem depois de um bloco que já processa o pedido, algumas rotas podem nunca chegar a executá-las. Verifique o ficheiro gerado antes de alterar a ordem.

A existência de regras do WordPress ou do Joomla não demonstra um conflito. Teste primeiro o URL com curl -I, verifique o código e o cabeçalho Location, confirme a entrada em Current Redirects e abra o .htaccess do DocumentRoot correto.

Se a resposta e a ordem mostrarem que um bloco da aplicação consome o pedido antes de chegar ao redirecionamento, mova apenas a regra afetada para que fique antes desse bloco. Conserve uma cópia e respeite os blocos geridos pelo WordPress, pelo LiteSpeed, por plugins e pela segurança.

Por exemplo, um redirecionamento colocado depois do bloco do WordPress pode não ser executado para rotas que esse bloco envia para index.php:

# 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

RewriteCond %{HTTP_HOST} ^antiguo\.ejemplo(?::[0-9]+)?$ [NC]
RewriteCond %{THE_REQUEST} \s/+([^?\s]*)
RewriteRule ^ https://nuevo.ejemplo/%1 [R=301,L,NE]

Se tiver confirmado essa interceção, coloque o redirecionamento fora do bloco gerido e antes dele:

RewriteEngine On
RewriteCond %{HTTP_HOST} ^antiguo\.ejemplo(?::[0-9]+)?$ [NC]
RewriteCond %{THE_REQUEST} \s/+([^?\s]*)
RewriteRule ^ https://nuevo.ejemplo/%1 [R=301,L,NE]

# 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

RewriteEngine On deve aparecer nesse contexto antes das regras que dele precisam, mas não tem de ser literalmente a primeira linha do ficheiro. Para forçar o HTTPS, use de preferência cPanel > Domains > Force HTTPS Redirect em vez de criar um redirecionamento manual.

Os domínios do exemplo são marcadores: substitua a origem e o destino pelos seus. A condição de host limita a regra ao domínio antigo; a rota retirada do pedido original conserva os seus caracteres codificados e a query string é mantida. Não adicione NE a outras regras sem rever como constroem o destino.

Teste a página inicial, uma rota interna, uma com acentos ou caracteres codificados e outra com parâmetros. Verifique também se o domínio novo não entra num ciclo. Antes de fixar a alteração como 301 permanente, pode usar 302 num teste controlado; depois, confirme a resposta sem depender de um redirecionamento guardado pelo navegador. Se curl -I der um resultado diferente do navegador, compare com um pedido GET: nem todas as aplicações respondem da mesma forma a HEAD.

Também lhe pode ser útil

Algo não bate certo ou mudou? Diga-nos e revemos.