Como fazer um redirecionamento em 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?
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/");
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 ()!
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)
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.
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()
eob_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
?>
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.
<?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()
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
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.
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)
header( 'Location: http://www.yoursite.com/new_page.html' );
header("Location: /index.php");
exit(0);
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");
<?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.
?>
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.
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.
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...
<?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.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.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();
?>
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");
?>
- 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>"; } ?>
`
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();
Se você está correndo em Apache Você também pode usar .htaccess para redireccionar.
Redirect 301 / http://new-site.com/
<?php
$url = "targetpage"
Function redirect$url(){
If (headers_sent()) == false{
Echo '<script>window.location.href="' . $url . '";</script>';
}}
?>
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 chamadau_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. 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>";
?>