HOWTO · PHP
Redirecionar em PHP
Este tutorial demonstra como redirecionar um usuário de uma página para uma página diferente em PHP
Nesta página
Para redirecionar uma requisição em PHP, envie um cabeçalho de resposta Location com header() antes que o script produza HTML ou outro conteúdo e, em seguida, encerre o script. O exemplo abaixo direciona o navegador para uma URL de destino. Coloque o arquivo PHP em um servidor web local e abra-o no navegador para ver a navegação.
Redirecionar para uma URL com a função header() do PHP
A função header() envia um cabeçalho de resposta HTTP. Em um redirecionamento, o campo do cabeçalho é Location, e seu valor é a URL de destino. O PHP precisa enviar esse cabeçalho antes de qualquer conteúdo do corpo da resposta, inclusive espaços em branco fora das tags PHP. Mantenha o código de redirecionamento perto do início do manipulador da requisição, antes dos templates ou da saída da página.
Este exemplo independente usa uma variável para armazenar a URL de destino. A chamada a exit encerra a requisição atual depois que a resposta é preparada, impedindo que o restante da página continue como se o redirecionamento não tivesse ocorrido. A verificação de execução fornecida executou este exemplo com sucesso e não produziu saída padrão; o redirecionamento é enviado na resposta HTTP, não impresso como texto. No navegador, abrir o arquivo PHP pelo servidor web local deve levar à URL de destino do exemplo.
<?php
$url = 'https://example.com/';
header('Location: ' . $url);
exit;
?>
Use uma URL para a qual sua aplicação esteja autorizada a enviar usuários. Se o destino vier de dados da requisição, valide-o com uma lista de permissões ou monte-o a partir de rotas confiáveis da aplicação; aceitar qualquer entrada do usuário em um redirecionamento pode levar visitantes a um site indesejado. Para uma rota dentro da mesma aplicação, um caminho como /account/ costuma ser suficiente.
Criar uma função auxiliar de redirecionamento em PHP com um código de status HTTP
Uma função auxiliar reutilizável chamada redirect pode receber tanto o destino quanto o status da resposta. O terceiro argumento de header() é o código de status; o segundo controla se um cabeçalho com o mesmo nome substitui um anterior. A função auxiliar abaixo usa 302 por padrão, código normalmente usado para um redirecionamento temporário, e aceita outro status quando a rota exigir.
<?php
function redirect(string $url, int $statusCode = 302): void
{
header('Location: ' . $url, true, $statusCode);
exit;
}
redirect('https://example.com/', 301);
?>
O exemplo passa 301 para indicar que o destino é permanente. Use esse status somente quando a mudança for duradoura; navegadores e outros clientes podem guardar redirecionamentos permanentes. 302 indica um redirecionamento temporário e é uma opção padrão mais adequada quando o destino pode mudar. O manual do PHP para header() documenta os parâmetros da função, e a referência da MDN sobre o status 301 descreve o status permanente.
A verificação de execução fornecida executou com sucesso este exemplo da função auxiliar e não produziu saída padrão; o status do redirecionamento e o cabeçalho Location fazem parte da resposta HTTP, não são texto impresso. Execute o arquivo PHP por meio de um servidor web local para observar a navegação no navegador. A função encerra a requisição após definir o cabeçalho da resposta. Em uma aplicação real, valide a URL antes de chamar a função auxiliar e escolha um status adequado, conforme a mudança seja temporária ou permanente. O cabeçalho Location e o status fazem parte da resposta HTTP, então essa abordagem funciona antes que o navegador receba o corpo da página.
Usar JavaScript como alternativa de redirecionamento no lado do cliente
Quando não for possível fazer um redirecionamento no servidor, a página pode pedir ao navegador que navegue usando window.location. Essa navegação ocorre no lado do cliente: o PHP envia o conteúdo da página e o navegador executa o script. Isso não é buffer de saída do PHP e não transforma a resposta HTTP em um redirecionamento do servidor. Também depende de o JavaScript estar habilitado; por isso, use a abordagem com header() do PHP quando o servidor puder decidir o destino antes de enviar a página.
O trecho a seguir mostra essa alternativa em uma página do navegador. Adicione-o a uma página que possa ser servida pelo servidor web local e abra-a em um navegador com JavaScript habilitado para ver a navegação até o destino. O trecho é apresentado como código-fonte para o navegador e não foi executado para este artigo.
<script>
window.location = "https://example.com/";
</script>
Como esse código é executado no navegador, ele não pode enviar um status de redirecionamento HTTP, como 301, na resposta que o navegador já recebeu. Mantenha o destino fixo ou valide qualquer valor usado para montá-lo, assim como faria em um redirecionamento no servidor. Use essa alternativa somente quando a navegação no lado do cliente for adequada à página; visitantes com JavaScript desabilitado permanecerão na página original.