Como faço para redirecionar em PHP?

1262

É possível redirecionar um usuário para uma página diferente usando o PHP?

Digamos que o usuário vá www.example.com/page.phpe desejo redirecioná-lo para www.example.com/index.php, como eu faria isso sem o uso de uma atualização meta? É possível?

Isso poderia até proteger minhas páginas de usuários não autorizados.

Sam
fonte
Você pode atualizar o cabeçalho no PHP: header
Zack Marrapese
11
@ Sam: assim como o nó lateral, não implementa nenhum tipo de protection from unauthorized usersredirecionamento; não é assim que as coisas devem ser feitas;)
Strae
7
@Strae O que há de errado em proteger páginas com redirecionamento? Então qual é a melhor maneira?
6
O redirecionamento @PravindaAmarathunga é um dos elementos, mas não o único. Apenas certifique-se de que os elementos protegidos não sejam exibidos para usuários não autorizados; O redirecionamento do navegador pode ser desativado no lado do cliente, por exemplo: se o navegador não fizer o redirecionamento e a página original for exibida normalmente, o que o usuário verá? O CMS geralmente faz o redirecionamento e não imprime itens protegidos, substituindo a saída normal por uma mensagem de cortesia.
Strae
@PravindaAmarathunga verificar o link de resposta de Markus: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Strae

Respostas:

1699

Resumo das respostas existentes mais meus dois centavos:

1. Resposta básica

Você pode usar a header()função para enviar um novo cabeçalho HTTP, mas ele deve ser enviado ao navegador antes de qualquer HTML ou texto (antes da <!DOCTYPE ...>declaração, por exemplo).

header('Location: '.$newURL);

2. detalhes importantes

morrer () ou sair ()

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

Por que você deve usar die()ou exit(): The Daily WTF

URL absoluto ou relativo

Desde junho de 2014, URLs absolutos e relativos podem ser usados. Veja o RFC 7231, que substituiu o antigo RFC 2616 , onde apenas URLs absolutos eram permitidos.

Códigos de status

O cabeçalho "Location" do PHP ainda usa o código de redirecionamento HTTP 302 , mas esse não é o que você deve usar. Você deve considerar 301 (redirecionamento permanente) ou 303 (outro).

Nota: O W3C menciona que o cabeçalho 303 é incompatível com "muitos agentes de usuário pré-HTTP / 1.1. Os navegadores usados ​​atualmente são todos agentes de usuário HTTP / 1.1. Isso não é verdade para muitos outros agentes de usuário, como aranhas e robôs.

3. Documentação

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

4. Alternativas

Você pode usar o método alternativo http_redirect($url);que requer a instalação do pecl do pacote PECL .

5. Funções auxiliares

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

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

    exit();
}

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

Isso é mais flexível:

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

6. Solução alternativa

Como mencionado, os header()redirecionamentos só funcionam antes que qualquer coisa seja gravada. Eles geralmente falham se invocados no meio da saída HTML . Você pode usar uma solução alternativa de cabeçalho HTML (não muito profissional!) Como:

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

Ou um redirecionamento de JavaScript mesmo.

window.location.replace("http://example.com/");
markus
fonte
5
Alguns problemas com esta resposta: 303 podem não ser o código de status "correto". 301 pode ser desejado para o Google, por exemplo. Em segundo lugar, header('Location: '.$newURL);deve ser antes de qualquer HTML (ou texto) ser passado para o navegador ou não funcionará corretamente.
Chuck Le Butt
6
Infelizmente, a história diária da WTF é comum. De qualquer forma, não é o dado que falta, que causa o problema, mas um design ruim. Encerrar o processo violentamente está errado em 99,9% dos casos. Uma solução comum e mais limpa (não a minha favorita) é lançar uma RedirectionException e capturá-la no ponto de entrada do aplicativo. Depois que você pode ter todo o seu "depois *" chamadas (logs / ligações estreitas / que nunca)
robertodecurnex
4
O http-equiv="Location"não é suportado por todos os navegadores. Você deve usar em refreshvez disso! <meta http-equiv="refresh" content="0;url=http://example.com/">
precisa saber é o seguinte
71
Nunca emita um 301 a menos que você esteja falando sério . 301 significa permanente, e permanente significa permanente , o que significa que será armazenado em cache pelos agentes do usuário, ou seja, noites longas e cheias de cafeína olhando para os logs do aplicativo, perguntando se você está ficando louco porque jura que alguma página deveria ter sido chamada ou atualizada e você jura para Deus, ele funciona na sua máquina, mas não na do cliente. Se você absolutamente precisar chamar um 301, coloque uma idade máxima de controle de cache no recurso. Você não tem sabedoria infinita e não deveria estar agindo como você.
madumlao
2
Mas existe uma razão para usar o die over exit? a saída parece mais limpa e apropriada.
Ars265 09/0315
122

Use a header()função para enviar um cabeçalho HTTPLocation :

header('Location: '.$newURL);

Ao contrário do que alguns pensam, die()não tem nada a ver com redirecionamento. Use-o apenas se você desejar redirecionar em vez da execução normal.

Arquivo example.php :

<?php
    header('Location: static.html');
    $fh = fopen('/tmp/track.txt', 'a');
    fwrite($fh, $_SERVER['REMOTE_ADDR'] . ' ' . date('c') . "\n");
    fclose($fh);
?>

Resultado de três 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

Resumindo - obrigatório die()/ exit()é uma lenda urbana que não tem nada a ver com o PHP real. Não tem nada a ver com o cliente "respeitando" o Location:cabeçalho. O envio de um cabeçalho não interrompe a execução do PHP, independentemente do cliente usado.

vartec
fonte
8
morrer () ou exit () é para os clientes que não respeitam a "Localização: ..." header
clawr
12
@clawr: Não, exit()é para impedir que a página apareça o conteúdo restante (pense em páginas restritas). O vartec está certo, não tem nada a ver com o cabeçalho HTTP Location e você não precisa exit. Eu escolhi incluí-lo na minha resposta porque, para alguém que não sabe como fazer um redirecionamento simples , é melhor jogar com segurança do que não implementar uma etapa simples, mas crucial, apenas para que ele possa tirar proveito do processo avançado ao controle.
Alix Axel
1
Mas os navegadores que respeitam o cabeçalho sairão da página e fecharão a conexão enquanto o script ainda estiver em execução. Isso é totalmente ruim. O PHP continuará com o script por algum tempo (é por isso que seu código é executado), mas pode abortá-lo aleatoriamente no meio da execução, deixando as coisas quebradas. Chamar ignore_user_abort () impedirá isso, mas sinceramente, não vale a pena. Apenas continue com suas coisas de escrita em HTML (embora provavelmente inúteis), mas não faça coisas que gravem em disco ou banco de dados após um cabeçalho ('Location:'); Grave no disco antes do redirecionamento, se possível. [Também: url deve ser absoluto.]
FrancescoMM
existe alguma maneira de redirecionar antes que o navegador detecte o protocolo HTTP? o motivo pelo qual preciso redirecionar é porque não consigo obter certificados SSL suficientes para todos os meus domínios. eu usaria .htaccesspara redirecionar, mas preciso de uma maneira de transmitir de alguma forma qual domínio redirecionado para o domínio final?
Oldboy
109
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 ()!

Alix Axel
fonte
6
E não se esqueça do buffer de saída ou você terminará com 'Cabeçalhos já enviados'.
21410 Kuroki Kaze
8
... e não se esqueça de imprimir algo como "você será redirecionado para $ nepage em $ n segundos, clique em $ link aqui se o redirecionamento não acontecer" Alguns comandos mais bruscos e algumas configurações do navegador podem falhar nesse redirecionamento.
Strae 20/04/09
3
@DaNieL: esse tipo de redirecionamento não leva "$ n segundos". Será instantâneo se isso acontecer, e qualquer navegador em conformidade deve lidar com isso. Acho que você está pensando nos redirecionamentos "meta refresh" que as pessoas usam quando não conhecem melhor.
Rmeador 20/04/09
1
@rmeador ... Para navegadores mais antigos e navegadores especiais. Primeiro, você deve fazer o cabeçalho do local, se houver um redirecionamento meta com "você será redirecionado para a página em x segundos" com um link, caso o redirecionamento falhe. Essa é a maneira correta e segura de fazer um redirecionamento.
21720 Andrew Moore
3
Andrew: como o navegador HTTP não respeita a Localização :?
vartec 21/04/2009
102

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

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

Você realmente não pode fazer isso no PHP, a menos que você armazene em buffer a saída da página e depois verifique a condição de redirecionamento. Isso pode ser muito complicado. Lembre-se de que os cabeçalhos são a primeira coisa que é enviada da página. A maior parte do redirecionamento geralmente é necessária posteriormente na página. Para isso, é necessário armazenar em buffer toda a saída da página e verificar a condição de redirecionamento posteriormente. Nesse ponto, você pode redirecionar o cabeçalho do usuário da página () ou simplesmente fazer eco da saída em buffer.

Para mais informações sobre buffer (vantagens)

O que é buffer de saída?

Hammad Khan
fonte
2
Simples e direto ao ponto! Ótimo para um simples redirecionamento de página!
Stathis Andronikos
E dessa maneira você não encontra o Cannot modify header information - headers already sent byerro comum .
Kai Noack
1
@hmd, e se o javascript estiver desativado?
Istiaque Ahmed 9/09/17
O javascript @IstiaqueAhmed quase sempre está ativado atualmente, mas se estiver desativado, você poderá usar o buffer do PHP. Esta pergunta SO responde isso. Se você estiver usando o PHP Buffering, não precisará desse método.
Hammad Khan
Falso, você pode (e deve) fazê-lo no PHP, mesmo sem buffer: em uma página bem projetada, todo o processamento relevante do PHP deve ocorrer antes que qualquer conteúdo HTML seja enviado ao usuário. Dessa forma, os redirecionamentos do PHP funcionarão bem.
MestreLion 4/08/18
91

1. Usando a função de cabeçalho com exit()

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

mas se você usar a função de cabeçalho, algumas vezes você receberá "avisos como o cabeçalho já enviado" para resolver que não ecoam ou são impressos antes de enviar 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 você não enfrentará nenhum problema

3. Usando a função de cabeçalho 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
?>
Juned Ansari
fonte
Trabalhe como um encanto. Eu uso <? Php echo "<script> location.href = ' google.fr/ '; </script >"; ?> Para testá-lo, e ele fez o que eu queria #
DoctorDroid Haiti 27/03
1
A segunda solução não funcionará com o JS desativado.
Tajni
55

A maioria dessas respostas está esquecendo um passo muito importante!

header("Location: myOtherPage.php");
die();

Deixar essa segunda linha vital pode acabar com o The Daily WTF . O problema é que os navegadores não precisam respeitar os cabeçalhos retornados pela sua página; portanto, com os cabeçalhos sendo ignorados, o restante da página será executado sem redirecionamento.

nickf
fonte
1
Que tal dar alguma saída ao usuário antes de matar o script? Você sabe, as pessoas gostam de saber o que está acontecendo ...
Strae
3
você está assumindo que o script não tem nada a fazer, exceto redirecionar. O que pode não ser verdade.
Vartec 20/04/09
13
@ Daniel: alterá-lo para morrer ( "Stop ignorando meus cabeçalhos!")
nickf
3
Gostei da explicação simples que die();você deu - se não o fizer, o usuário poderá ver a página completa por um momento, se você o usar; o usuário será redirecionado e nenhuma falha de conteúdo temporário irá mostrar + 1
TheBlackBenzKid
É possível que ocorram atividades úteis após o envio do cabeçalho, atividade que nada envia ao navegador, mas registra a atividade ou termina as transações de registro. Por esse motivo, a necessidade de morrer / sair depende do script.
DanAllen
28

Usar:

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

Ou se você já abriu tags PHP, use o seguinte:

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 de incluir exit()ou incluir die().

Jake
fonte
25

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

<?php
    session_start();

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

    // Page goes here
?>

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

Recentemente, recebi ataques cibernéticos e decidi que precisava conhecer os usuários que tentavam acessar o painel de administração ou parte reservada do aplicativo da web.

Portanto, adicionei um acesso de log para o endereço IP e as sessões do usuário em um arquivo de texto, porque não quero incomodar meu banco de dados.

Asuquo12
fonte
19

Muitas dessas respostas estão corretas, mas elas assumem que você tem um URL absoluto, o que pode não ser o caso. Se você deseja usar um URL relativo e gerar o restante, 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
Lucas
fonte
16

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

Daniel A. White
fonte
existe alguma maneira de redirecionar antes que o navegador detecte o protocolo HTTP? o motivo pelo qual preciso redirecionar é porque não consigo obter certificados SSL suficientes para todos os meus domínios. eu usaria .htaccesspara redirecionar, mas preciso de uma maneira de transmitir de alguma forma qual domínio redirecionado para o domínio final?
Oldboy
16

Use o seguinte código:

header("Location: /index.php");
exit(0);   
joan16v
fonte
14

Eu já respondi a essa pergunta, mas vou fazê-lo novamente, pois, entretanto, aprendi que existem casos especiais se você estiver executando na CLI (os redirecionamentos não podem acontecer e, portanto, não deveriam exit()) ou se o seu servidor da Web estiver executando o PHP como um CGI (F) (ele precisa de um Statuscabeçalho definido anteriormente para redirecionar corretamente).

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();
    }
}

Eu também tratada a questão de apoiar os diferentes códigos de redirecionamento de HTTP ( 301, 302, 303e 307), como foi abordada nos comentários da minha resposta anterior. Aqui estão as descrições:

  • 301 - movido permanentemente
  • 302 - Encontrado
  • 303 - Ver outros
  • 307 - Redirecionamento temporário (HTTP / 1.1)
Alix Axel
fonte
11

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

<?php
    header('Location: mypage.php');
?>

Nesse caso, mypage.phpé o endereço da página para a qual você deseja redirecionar os visitantes. Este endereço pode ser absoluto e também pode incluir os parâmetros neste formato:mypage.php?param1=val1&m2=val2)

Caminho relativo / absoluto

Ao lidar com caminhos relativos ou absolutos, é ideal escolher um caminho absoluto da raiz do servidor (DOCUMENT_ROOT). Use o seguinte formato:

<?php
    header('Location: /directory/mypage.php');
?>

Se alguma vez a página de destino estiver em outro servidor, inclua o URL completo:

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

Cabeçalhos HTTP

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

Redirecionamentos temporários / permanentes

Por padrão, o tipo de redirecionamento apresentado acima é temporário. Isso significa que os mecanismos de pesquisa, como a Pesquisa Google, não levarão em conta o redirecionamento durante a indexação.

Se você deseja notificar os mecanismos de pesquisa que uma página foi permanentemente movida para outro local, use o seguinte código:

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

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

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

Quando você clica no link acima, você é automaticamente redirecionado para esta página. Além disso, é um redirecionamento permanente (Status: 301 Movido Permanentemente). Portanto, se você digitar o primeiro URL no Google, será automaticamente redirecionado para o segundo link redirecionado.

Interpretação do código PHP

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

<?
    header('Status: 301 Moved Permanently', false, 301);
    header('Location: address');
    exit();
?>
Estrela
fonte
Por que (perto do final do segundo parágrafo)? Você quer dizer em &paravez disso (para que o todo leia mypage.php?param1=val1&param2=val2))? (A entidade HTML para ) é "¶" - talvez algum programa externo tenha feito uma conversão?).
Peter Mortensen
9

Usar:

<?php
    header('Location: redirectpage.php');
    header('Location: redirectpage.php');
    exit();
    echo "<script>location.href='redirectpage.php';</script>";
?>

Este é um redirecionamento PHP normal e normal, mas você pode fazer uma página de redirecionamento com alguns segundos de espera pelo código abaixo:

<?php
    header('refresh:5;url=redirectpage.php '); // Note: here 5 means 5 seconds wait for redirect.
?>
Obaidul Haque
fonte
7

Na véspera da web semântica, a correção é algo a considerar. Infelizmente, o cabeçalho "Location" do PHP ainda usa o código redirecionado HTTP 302 , que, estritamente, não é o melhor para redirecionamento. O que ele deve usar é o 303 .

O W3C tem a gentileza de mencionar que o cabeçalho 303 é incompatível com "muitos agentes de usuário pré-HTTP / 1.1", o que equivaleria a nenhum navegador em uso atual. Portanto, o 302 é uma relíquia, que não deve ser usada.

... ou você pode simplesmente ignorá-lo, como todo mundo ...

Henrik Paul
fonte
7

Você pode usar alguns métodos JavaScript 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");

Vikram Pote
fonte
Javascript é executado no cliente, que pode ou não ser o que você está procurando.
precisa saber é o seguinte
7

Sim, você 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 exit () logo após a header()função para evitar a execução do código abaixo.

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

Casper
fonte
6

Como outros aqui disseram, enviando o cabeçalho do local com:

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

mas você precisa fazer isso antes de enviar qualquer outra saída para o navegador.

Além disso, se você usar isso para bloquear usuários não autenticados de determinadas páginas, como você mencionou, lembre-se de que alguns agentes ignoram isso e continuam na página atual de qualquer maneira, portanto, você precisará morrer ( ) depois de enviá-lo.

Brent
fonte
but you need to do it before you've sent any other output to the browser. Impressionante!! Estive pesquisando por minutos sobre o motivo pelo qual eu continuava recebendo os cabeçalhos já enviou um erro. +1 !!
josh
Mais geral, você tem / para seu script completamente /. die()é apenas uma maneira de fazer isso.
MauganRa
6

Aqui estão os meus pensamentos:

IMHO, a melhor maneira de redirecionar uma solicitação recebida seria usando cabeçalhos de local, que vão

<?php
    header("Location: /index.php");
?>

Depois que essa instrução for executada e a saída enviada, o navegador começará a redirecionar o usuário. No entanto, verifique se não houve nenhuma saída (echo / var_dump) antes de enviar cabeçalhos, caso contrário, isso levará a erros.

Embora essa seja uma maneira rápida e suja de alcançar o que foi originalmente solicitado, acabaria sendo um desastre de SEO, pois esse tipo de redirecionamento é sempre interpretado como um redirecionamento 301/302, portanto, os mecanismos de pesquisa sempre verão o seu página de índice como uma página redirecionada, e não uma página de destino / página principal.

Portanto, isso afetará as configurações de SEO do site.

Bhaskar Pramanik
fonte
1
exit () deve ser usado imediatamente após o cabeçalho ()
EKanadily 17/17/17
@docesam .. concordou .. exit () deve ser chamado imediatamente após a chamada do header (). No entanto, eu sinto que, se não houver mais saída para o navegador após esta declaração de header (), exit () pode não ser necessário - Apenas minha opinião
Bhaskar Pramanik
sim, mas você deve explicar isso porque alguém pode copiar sua linha de código para o script dele e isso pode causar longos períodos de círculos em torno de si, descobrindo o que deu errado.
EKanadily
1
@BhaskarPramanik imagine que você tem para bloquear uma porta rapidamente, mas então você tem que puxar / empurrar / esmagá-los novamente para ter certeza se ele já bloqueado ou não ..
aswzen
5

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

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

Verifique se nenhum código funcionará após

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

Todo o código deve ser executado antes da linha acima.

Suponha,

Caso 1:

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

Ele será redirecionado corretamente para o local (index.php).

Caso 2:

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

O código acima não será redirecionado para o local (index.php).

sabuz
fonte
Já existe uma resposta que possui 1085 que contém as informações fornecidas, e muito mais.
Patrick Hund
5

Sim, é possível usar o PHP. Nós redirecionaremos para outra página.

Tente o seguinte código:

<?php
    header("Location:./"); // Redirect to index file
    header("Location:index.php"); // Redirect to index file
    header("Location:example.php");
?>
Bhargav Chudasama
fonte
4

1. Usando header , uma função PHP embutida

a) Redirecionamento simples sem parâmetros

<?php
   header('Location: index.php');
?>

b) Redirecionar com parâmetros GET

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

2. Redirecione com JavaScript em PHP

a) Redirecionamento simples sem parâmetros

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

b) Redirecionar com parâmetros GET

<?php
     $id = 2;
     echo "<script>location.href='index.php?id=$id&msg=succesfully redirect';</script>";
   ?>
Shaan Ansari
fonte
De alguma forma, o bit javascript era a única coisa que funcionava na hospedagem final do site; Eu acredito que é uma questão de cache, mas com isso eu resolvi imediatamente.
cdsaenz 28/04
3

Podemos fazer isso de duas maneiras:

  1. Quando o usuário acessar https://bskud.com/PINCODE/BIHAR/index.php , redirecione para https://bskud.com/PINCODE/BIHAR.php

    Pelo código PHP abaixo

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

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

  2. Quando qualquer condição for verdadeira, redirecione para outra página:

    <?php
        $myVar = "bskud";
        if ($myVar == "bskud") {
    ?>
    
    <script> window.location.href="https://bskud.com";  </script>
    
    <?php
        }
        else {
            echo "<b>Check the website name again</b>";
        }
    ?>
Kavita Sharma
fonte
O que é isso? Por favor, não use links para seu próprio site. E o segundo exemplo usa redirecionamento de javascript, e não a header()função PHP .
Scriptman
2

Usar:

<?php
    $url = "targetpage"
    function redirect$url(){
        if (headers_sent()) == false{
            echo '<script>window.location.href="' . $url . '";</script>';
        }
    }
?>
Joshua Charles Pickwell
fonte
1
Você poderia explicar a função do seu código? Sua resposta foi sinalizada devido ao tamanho e ao conteúdo.
www139
2

Existem várias maneiras de fazer isso, mas se você preferir php, recomendo o uso da header()função.

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ê poderá adicionar autenticações e outros elements de verificação.

Vamos tentar verificando o nível do usuário.

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

No 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;
        }
     }

     . . .

Você chamará a função para todas as páginas que deseja autenticar.

Como em page.phpqualquer outra página.

<?php

    // page.php

    require function.php

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 5
    authRedirect($_SESSION[‘u_auth’], 5);

    // Redirects to www.example.com/index.php if the
    // user isn’t authentication level 4
    authRedirect($_SESSION[‘u_auth’], 4);

    // Redirects to www.someotherplace.com/somepage.php if the
    // user isn’t authentication level 2
    authRedirect($_SESSION[‘u_auth’], 2, www.someotherplace.com/somepage.php”);

    . . .

Referências;

Pyr James
fonte
2

Eu gosto do tipo de redirecionamento ao longo do tempo.

<?php

header("Refresh: 5;url=índex.php");
PauloBoaventura
fonte
2

Usando a função de cabeçalho para roteamento

<?php
     header('Location: B.php');
     exit();
?>

Suponha que queremos rota de A.php arquivo para b.php do que nós temos que ter ajuda de <button>ou <a>. Vamos ver um exemplo

<?php
if(isset($_GET['go_to_page_b'])) {
    header('Location: B.php');
    exit();

}
?>

<p>I am page A</p>
<button name='go_to_page_b'>Page B</button>

B.php

<p> I am Page B</p>
Mehedi Abdullah
fonte
Você pode fornecer a solução exata ou boa?
Mehedi Abdullah
Já existem muitas soluções. Sua solução misturou HTML e PHP sem tags PHP. Em segundo lugar, você envia o cabeçalho após a impressão do código html, para que não funcione. E o nome dos arquivos de exemplo é ruim. Você não deve nomeá-los A.php e B.php. Eu sei que é apenas um exemplo, mas você ainda deve se preocupar com a convenção de nomenclatura.
Tajni
1

Se você estiver executando o Apache, também poderá usar o .htaccess para redirecionar.

Redirect 301 / http://new-site.com/
michal.jakubeczy
fonte
1

Você pode tentar usar a headerfunção PHP para fazer o redirecionamento. Você deseja definir o buffer de saída para que o seu navegador não gere um aviso de redirecionamento na tela.

ob_start();
header("Location: " . $website);
ob_end_flush();
Doruk Ayar
fonte
1
exit () deve ser usado imediatamente após o cabeçalho (). O buffer também foi ativado automaticamente por padrão já há algum tempo.
EKanadily
0

tente este

 $url = $_SERVER['HTTP_REFERER'];
 redirect($url);
Shareque
fonte