Como fazer um redirecionamento em PHP?

É possível redirecionar um usuário para uma página diferente através do uso de PHP?

digamos que o utilizador vai a {[[0]} e eu quero redireccioná-los para www.example.com/index.php, como o faria sem o uso de uma actualização meta? Possível?

Isto pode até proteger as minhas páginas de utilizadores não autorizados.

 1021
Author: gturri, 2009-04-20

28 answers

Resumo das respostas existentes mais os meus próprios dois cêntimos:

1. Resposta básica

Poderá usar a função header() para enviar um novo cabeçalho HTTP, mas este deverá ser enviado para o navegador antes de qualquer HTML ou texto (por exemplo, antes da declaração <!DOCTYPE ...>).

header('Location: '.$newURL);

2. Detalhes importantes

Die () or exit()

header("Location: http://example.com/myOtherPage.php");
die();

Porque deve utilizar die() ou exit(): o FSM Diário

Absoluto ou relativo URL

Desde junho de 2014 podem ser utilizados URLs absolutos e relativos. Ver RFC 7231 que tinha substituído o antigo RFC 2616, onde só eram permitidos URLs absolutos.

Códigos Do Estado

O cabeçalho "localização"do PHP ainda usa o HTTP 302-código de redireccionamento, mas este não é o que você deve usar. Você deve considerar:301 ( redireccionamento permanente) ou 303 (outros).

Nota: W3C menciona que o 303-header é incompatível com " muitos agentes de usuário pré-HTTP/1.1. Navegadores usados atualmente são todos os agentes de usuário HTTP/1.1. Isso não é verdade para muitos outros agentes usuários como aranhas e robôs.

3. Documentação

Cabeçalhos HTTP e a função header() em PHP

4. Alternativas

Pode utilizar o método alternativo de {[11] } que necessita da instalação do pacote PECL.

5. Funções Auxiliares

Esta função não incorpora o código de estado 303:

function Redirect($url, $permanent = false)
{
    header('Location: ' . $url, true, $permanent ? 301 : 302);

    exit();
}

Redirect('http://example.com/', false);

Isto é mais flexível:

function redirect($url, $statusCode = 303)
{
   header('Location: ' . $url, true, $statusCode);
   die();
}

6. Workaround

Como mencionado header() redirecciona apenas o trabalho antes de qualquer coisa ser escrita. Eles geralmente falham se invocados INMIDST HTML saída. Então você pode usar um cabeçalho HTML workaround (não muito profissional!) tipo:

 <meta http-equiv="refresh" content="0;url=finalpage.html">

Ou um JavaScript redireccionar mesmo.

window.location.replace("http://example.com/");
 1454
Author: markus, 2018-08-13 12:34:24
function Redirect($url, $permanent = false)
{
    if (headers_sent() === false)
    {
        header('Location: ' . $url, true, ($permanent === true) ? 301 : 302);
    }

    exit();
}

Redirect('http://www.google.com/', false);
Não se esqueça de morrer () / sair ()!
 93
Author: Alix Axel, 2009-04-28 03:14:38

Saída JavaScript do PHP usando echo, que fará o trabalho.

echo '<script type="text/javascript">
           window.location = "http://www.google.com/"
      </script>';

Você não pode realmente fazê-lo em PHP a menos que você buffer a saída da página e, em seguida, verificar mais tarde para a condição de redirecionamento. Isso pode ser muito complicado. Lembre-se que os cabeçalhos são a primeira coisa que é enviada da página. A maioria do redirecionamento é geralmente necessária mais tarde na página. Para isso, você tem que buffer toda a saída da página e verificar para a condição de redirecionamento mais tarde. Nesse momento você pode redireccionar o cabeçalho do Utilizador da página() ou simplesmente ecoar o resultado do 'buffer'.

Para mais informações sobre tamponamento (vantagens)

O que é o buffer de saída?

 88
Author: Hammad Khan, 2017-05-23 11:47:36

Utilizar header() function to send HTTP Location header:

header('Location: '.$newURL);
Ao contrário do que alguns pensam, não tem nada a ver com redirecionamento. Use-o apenas Se quiser redireccionar em vez de da execução normal. Exemplo.php:
<?php 
header('Location: static.html');
$fh = fopen('/tmp/track.txt','a');
fwrite($fh, $_SERVER['REMOTE_ADDR'].' '.date('c')."\n");
fclose($fh);
?>
Resultado ou 3 execuções:
bart@hal9k:~> cat /tmp/track.txt
127.0.0.1 2009-04-21T09:50:02+02:00
127.0.0.1 2009-04-21T09:50:05+02:00
127.0.0.1 2009-04-21T09:50:08+02:00
[[10]}retomar-obrigatório die()/exit() é alguma lenda urbana, que não tem nada a ver com PHP real. Não tem nada a ver com o "respeito" do cliente. cabecalho. O cabeçalho de envio não impede a execução do PHP, independentemente do cliente usado.
 83
Author: vartec, 2009-04-21 07:52:52

1. Usar a função header com exit()

<?php 
     header('Location: target-page.php');
     exit();
?>

Mas se usar a função header, algumas vezes irá ter " aviso como o header já envia " para resolver que não fazem eco ou imprimem antes de enviar os cabeçalhos ou você pode simplesmente usar die() ou exit() Depois da função de cabeçalho.

2. Sem cabeçalho

<?php 
    echo "<script>location.href='target-page.php';</script>";
?>
Aqui não enfrentarás nenhum problema.

3. Usar a função header com ob_start() e ob_end_flush()

<?php
ob_start(); //this should be first line of your page
header('Location: target-page.php');
ob_end_flush(); //this should be last line of your page
?>
 58
Author: Juned Ansari, 2018-03-20 10:08:37

A maioria destas respostas está esquecendo um Muito passo importante!

header("Location: myOtherPage.php");
die();
Deixar de fora a segunda linha vital pode ver - te acabar no Diário WTF. O problema é que os navegadores não têm Para respeitar os cabeçalhos que a sua página retorna, de modo que com os cabeçalhos sendo ignorados, o resto da página será executado sem um redirecionamento.
 50
Author: nickf, 2009-04-20 14:33:34
<?php header('Location: another-php-file.php'); exit(); ?>

Ou se já abriu as etiquetas de php, use isto:

header('Location: another-php-file.php'); exit();

Você também pode redirecionar para páginas externas, por exemplo:

header('Location: https://www.google.com'); exit();

Certifique-se que inclui exit() ou include die()

 23
Author: jake, 2016-06-14 13:47:00

Muitas dessas respostas estão corretas, mas eles assumem que você tem uma URL absoluta, o que pode não ser o caso. Se você quiser usar um URL relativo e gerar o resto, então você pode fazer algo assim...

$url = 'http://' . $_SERVER['HTTP_HOST'];            // Get the server
$url .= rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); // Get the current directory
$url .= '/your-relative/path-goes/here/';            // <-- Your relative path
header('Location: ' . $url, true, 302);              // Use either 301 or 302
 18
Author: Luke, 2014-01-15 04:21:54

Você pode usar variáveis de sessão para controlar o acesso às páginas e autorizar usuários válidos também.

<?php

session_start();

if ( !isset( $_SESSION["valid_user"]) )
{
    header("location:../");
   die();
}

// Page goes here
?>

Http://php.net/manual/en/reserved.variables.session.php.

Recentemente, tive ataques cibernéticos e decidi que precisava de conhecer os utilizadores a tentar aceder ao painel administrativo ou a parte reservada da aplicação web.

Então, eu adicionei um IP de acesso log e sessões de usuário em um arquivo de texto porque eu não quero incomodar a minha base de dados.

 17
Author: Asuquo12, 2018-05-11 13:57:12

Já respondi a esta pergunta, mas fá-lo-ei de novo já que entretanto aprendi que existem casos especiais se estiver a correr no CLI (os redirectos não podem acontecer e portanto não devem exit()) ou se o seu servidor Web estiver a correr o PHP como um (F)CGI (precisa de um cabeçalho Status previamente definido para redireccionar correctamente).

function Redirect($url, $code = 302)
{
    if (strncmp('cli', PHP_SAPI, 3) !== 0)
    {
        if (headers_sent() !== true)
        {
            if (strlen(session_id()) > 0) // if using sessions
            {
                session_regenerate_id(true); // avoids session fixation attacks
                session_write_close(); // avoids having sessions lock other requests
            }

            if (strncmp('cgi', PHP_SAPI, 3) === 0)
            {
                header(sprintf('Status: %03u', $code), true, $code);
            }

            header('Location: ' . $url, true, (preg_match('~^30[1237]$~', $code) > 0) ? $code : 302);
        }

        exit();
    }
}
Também tratei da questão de apoiar os diferentes códigos de redirecionamento HTTP.(301, 302, 303 e 307, Como foi referido nos comentários da minha resposta anterior, aqui estão as descrições:
  • 301 - Transferido Permanentemente
  • 302 - encontrado
  • 303 - Ver Outros
  • 307 - redirecionamento temporário (HTTP/1.1)
 13
Author: Alix Axel, 2011-04-28 21:31:36

header( 'Location: http://www.yoursite.com/new_page.html' );

 12
Author: Daniel A. White, 2009-04-20 14:14:41
header("Location: /index.php");
exit(0);   
 10
Author: joan16v, 2015-01-12 11:03:32

Você pode usar alguns métodos de escrita java como abaixo

 1)self.location="http://www.example.com/index.php";

 2)window.location.href="http://www.example.com/index.php";

 3)document.location.href = 'http://www.example.com/index.php';  

 4)window.location.replace("http://www.example.com/index.php");
 8
Author: Vikram Pote, 2015-03-12 09:42:18
<?php 
header('Location: redirectpage.php');
header('Location: redirectpage.php');exit();
echo "<script>location.href='redirectpage.php';</script>";
?>

Este é o redireccionamento normal do PHP, mas você pode fazer um redireccionamento de uma página com poucos segundos de espera abaixo do Código:

<?php
header('refresh:5;url=redirectpage.php '); //Note: here 5 means 5 seconds wait for redirect.
?>
 7
Author: Obaidul Haque, 2017-08-18 06:46:30

Sim, pode usar a função header () ,

header("Location: http://www.yourwebsite.com/user.php"); /* Redirect browser */
exit();

E também a melhor prática é chamar a função Saída () logo após a função header() para evitar a execução abaixo do Código.

De acordo com a documentação, header() deve ser chamado antes de qualquer saída Real ser enviada.

 7
Author: CasperSL, 2017-11-28 01:11:32

Como outros aqui disseram, enviar o cabeçalho da localização com:

header( "Location: http://www.mywebsite.com/otherpage.php" );

Mas tem de o fazer antes de enviar qualquer outra saída para o navegador.

Também, se vai usar isto para bloquear utilizadores não autenticados de certas páginas, como mencionou, tenha em mente que alguns agentes de utilizadores irão ignorar isto e continuar na página actual de qualquer forma, por isso terá de morrer() depois de O enviar.

 6
Author: Brent, 2009-04-20 14:23:17
Na véspera da web Semântica, a correcção é algo a considerar. Infelizmente, o "Location"-header do PHP ainda usa o HTTP 302 - código de redirecionamento, que, estritamente, não é o melhor para redirecionamento. O que ele deve usar em vez disso, é o 303 um.

O W3C é suficientemente gentil para mencionar que o cabeçalho 303 é incompatível com "muitos agentes de utilizador pré-HTTP/1.1", O que equivaleria a nenhum navegador no uso actual. Então, o 302 é uma relíquia, que não deve ser usado.

...ou podes simplesmente ignorá-lo, como toda a gente...

 6
Author: Henrik Paul, 2009-04-20 20:25:12
Talvez seja tarde demais para responder a esta. No entanto, aqui estão os meus pensamentos: IMHO, a melhor maneira de redireccionar um pedido de entrada seria Usando cabeçalhos de localização, que vai
<?php
header("Location: /index.php");
?>

Assim que esta declaração for executada, e o resultado for enviado, o navegador começará a redireccionar o utilizador. No entanto, certifique-se de que não houve qualquer Saída (qualquer eco / var_dump) antes de enviar headers, caso contrário ele vai levar a erros.

Embora esta seja uma forma rápida e suja de alcançar o que foi originalmente perguntado, no entanto, acabaria por se tornar um desastre SEO, como este tipo de re-direto é sempre interpretado como um 301 / 302 re-direto, portanto os motores de busca sempre verá sua página de índice como uma página re-direcionada, e não algo de uma página de destino / Página Principal. Assim, afetará as configurações do SEO do site.
 6
Author: Bhaskar Pramanik, 2017-01-28 14:48:31

A melhor maneira de redireccionar com PHP é o seguinte código...

 header("Location: /index.php");

Certifica-te que nenhum código funciona depois

header("Location: /index.php");

Todos os códigos devem ser executados antes da linha acima.

Suponha,

Processo 1:

echo "I am a web developer";
header("Location: /index.php");

Ele vai redireccionar corretamente para o local (índice.pai).

Processo 2:

return $something;
header("Location: /index.php");

O código acima não irá redireccionar para a localização(índice.pai).

Com sorte, está claro.
 5
Author: sabuz, 2017-04-09 09:38:07

Para redireccionar o visitante para outra página (particularmente útil num loop condicional), basta usar o seguinte código:

<?php 
header('Location: mypage.php'); 
?>
Neste caso, mypage.php é o endereço da página para a qual você gostaria de redirecionar os visitantes. Este endereço pode ser absoluto e pode também incluir os parâmetros neste formato: mypage.php?param1=val1¶m2=val2)

Localização Relativa / Absoluta

Quando se trata de caminhos relativos ou absolutos, é ideal escolher um caminho absoluto da raiz de o servidor (DOCUMENT_ root). Usar o seguinte formato:
<?php 
header('Location: /directory/mypage.php'); 
?>

Se alguma vez a página de destino estiver noutro servidor, você inclui o URL completo:

<?php 
header('Location: http://www.ccm.net/forum/'); 
?> 

Cabeçalhos de HTTP

De acordo com o protocolo HTTP, os cabeçalhos HTTP devem ser enviados before qualquer tipo de conteúdo. Isso significa que nenhum personagem deve ser enviado antes do cabeçalho-nem mesmo um espaço vazio!

Redirecções Temporárias/Permanentes

Por omissão, o tipo de redireccionamento apresentado acima é temporário. Isto significa que os motores de busca, como o Google, não terão em conta o redirecionamento ao indexar.

Se quiser notificar os motores de busca de que uma página foi mudada permanentemente para outro local, use o seguinte código:

<? 
header('Status: 301 Moved Permanently', false, 301); 
header('Location: new_address'); 
?>

Por exemplo, esta página tem o seguinte código:

<? 
header('Status: 301 Moved Permanently', false, 301); 
header('Location: /pc/imprimante.php3'); 
exit(); 
?>

Quando você clicar no link acima, você é automaticamente redirecionado para esta página. Além disso, é uma reorientação permanente (Estado: 301 Deslocado Permanentemente). Então, se você digitar o primeiro URL no Google, você será automaticamente redirecionado para o segundo link, redirecionado.

Interpretação do código PHP

O código PHP localizado após o cabeçalho () será interpretado pelo servidor, mesmo que o visitante se mova para o endereço especificado no redirecionamento. Na maioria dos casos, isto significa que necessita de um método para seguir a função header() da função exit() de modo a diminuir a carga da servidor:

<? 
header('Status: 301 Moved Permanently', false, 301); 
header('Location: address'); 
exit(); 
?>
 5
Author: Star, 2018-02-13 09:26:52

Sim, é possível usar o PHP, vamos redireccionar para outra página, tentar este:

<?php
header("location:./");//redirect to index file
header("location:index.php");//redirect to index file
header("location:example.php");
?>
 4
Author: Bhargav Chudasama, 2017-06-08 09:48:28
Podemos fazer de duas maneiras.
  1. quando o utilizador aparece https://bskud.com/PINCODE/BIHAR/index.php então redireccione para https://bskud.com/PINCODE/BIHAR.php

Abaixo do código php

<?php header("Location: https://bskud.com/PINCODE/BIHAR.php"); exit; ?>

Guardar o código acima em https://bskud.com/PINCODE/BIHAR/index.php

2.Quando qualquer condição verdadeira, em seguida, redirecionar para outra página

<?php  $myVar = "bskud";   if ($myVar == "bskud") { ?>  <script> window.location.href="https://bskud.com";  </script> <?php  } else {  echo "<b>Check Website Name Again</b>"; } ?>

`

 3
Author: Kavita Sharma, 2018-01-04 09:57:51

Poderá actualizar o cabeçalho no cabeçalho php:

 2
Author: Zack Marrapese, 2009-04-20 19:47:17

Você pode tentar usar a função de cabeçalho php para fazer o redirecionamento. Você vai querer definir o buffer de saída para que o seu navegador não lance um aviso de redirecionamento para a tela.

ob_start();
header("Location: ".$website);
ob_end_flush();
 1
Author: Doruk Ayar, 2016-11-15 19:51:24

Se você está correndo em Apache Você também pode usar .htaccess para redireccionar.

Redirect 301 / http://new-site.com/
 1
Author: jabko87, 2017-10-13 10:56:05
<?php
$url = "targetpage"
Function redirect$url(){
   If (headers_sent()) == false{
      Echo '<script>window.location.href="' . $url . '";</script>';
}}
?>
 1
Author: Joshua Charles Pickwell, 2017-11-20 19:10:01

Existem várias maneiras de fazer isto, mas se preferir php, eu recomendaria o uso da função header().

Basicamente

$your_target_url = “www.example.com/index.php”;
header(“Location : $your_target_url”);
exit();

Se você quiser aumentar um pouco, é melhor usá-lo em funções, dessa forma, você é capaz de adicionar autenticações e outros elementos de verificação nele.

Vamos tentar verificar o nível do utilizador. Então, suponha que você tenha armazenado o nível de autoridade do usuário em uma sessão chamada u_auth.

Na function.php

<?php

function authRedirect($get_auth_level, $required_level, $if_fail_link = “www.example.com/index.php”){
    if($get_auth_level != $required_level){
        header(location : $if_fail_link);
        return false;
        exit();
    }else{
        return true;
    }
 }

 . . . 

Então você vai ligar para a função para cada página que você quer autenticar.

Como em page.php ou em qualquer outra página.

<?php

// page.php

require “function.php”

authRedirect($_SESSION[‘u_auth’], 5);  // redirects to www.example.com/index.php if the user isn’t auth level 5
authRedirect($_SESSION[‘u_auth’], 4);  // redirects to www.example.com/index.php if the user isn’t auth level 4
authRedirect($_SESSION[‘u_auth’], 2, “www.someotherplace.com/somepage.php”);  // redirects to www.someotherplace.com/somepage.php if the user isn’t auth level 2


. . . 

Espero que ache algum do conteúdo útil

Referências;

 1
Author: Pyr James, 2018-01-28 22:17:07

1. Usar a função PHP incorporada no cabeçalho

A) redireccionamento simples sem parâmetros {[[8]}

<?php

   header('Location: index.php');

?>

B) redireccionar com os parâmetros GET

<?php

      $id = 2;

      header("Location: index.php?id=$id&msg=succesfully redirect");

  ?>

2. Redireccionar com o javascript no php

A) redireccionamento simples sem parâmetros {[[8]}

<?php 

     echo "<script>location.href='index.php';</script>";

 ?>

B) redireccionar com os parâmetros GET

<?php 

     $id = 2;

     echo "<script>location.href='index.php?id=$id&msg=succesfully redirect';</script>";

   ?>
 0
Author: Shaan Ansari, 2018-08-03 13:26:57