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();
?>
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:...') |