Criar Redireccionamento em PHP e .htaccess

O redireccionamento permite enviar visitantes para outro endereço, seja para um site externo ou outra localização do mesmo alojamento. É importante escolher o tipo correcto: se o redireccionamento é permanente, deve-se utilizar o código 301 para que os motores de busca (Google, Bing, Yahoo) actualizem o URL nos resultados de pesquisa.

Redireccionamento em PHP

Crie um ficheiro PHP (por exemplo index.php) com o seguinte conteúdo para um redireccionamento permanente (301):

<?php
header('Location: https://www.sitedestino.pt', true, 301);
exit();
?>
Importante: O exit() após header() garante que o script pára imediatamente. Sem ele, o resto do código PHP continua a executar antes do redireccionamento.

Para um redireccionamento temporário (302), remova os parâmetros true e 301:

<?php
header('Location: https://www.sitedestino.pt');
exit();
?>

Redireccionamento em .htaccess

Crie um ficheiro .htaccess (incluindo o ponto no início) na raiz do alojamento com o seguinte conteúdo, de acordo com o tipo de redireccionamento pretendido:

Redireccionamento permanente (301)

Redirect 301 / http://www.sitedestino.pt/

O parâmetro / representa o URL a ser redirecionado. Se o .htaccess estiver dentro de uma subdirectoria, altere para o nome da subpasta:

Redirect /subpasta/ http://www.sitedestino.pt/

Redireccionamento com RewriteRule

Alternativamente, pode utilizar mod_rewrite para um redireccionamento permanente que preserva o caminho do URL:

RewriteEngine On
RewriteRule ^/?(.*)$ http://www.sitedestino.pt/$1 [L,R=301,QSA]
Directiva Significado
L Last — não processa mais regras
R=301 Redirect com código HTTP 301 (permanente)
QSA Query String Append — preserva parâmetros do URL

301 vs 302: qual utilizar?

Código Tipo Quando utilizar
301 Permanente O conteúdo mudou definitivamente de endereço. Motores de busca actualizam o URL.
302 Temporário Redireccionamento temporário (manutenção, campanhas). Motores de busca mantêm o URL original.

Erros comuns

Problema Causa Solução
“Headers already sent” Output antes de header() (espaços, HTML, echo) Colocar header() antes de qualquer output. Usar ob_start() se necessário.
500 Internal Server Error Sintaxe incorrecta no .htaccess Verificar espaços, aspas e directivas. Confirmar que mod_rewrite está activo.
Redireccionamento infinito O destino é o mesmo domínio Adicionar condição RewriteCond para excluir o domínio de destino
PHP não redirecciona Falta exit() após header() Adicionar sempre exit() depois de header('Location:...')

Artigos Relacionados