É possível redirecionar um usuário para uma página diferente usando o PHP?
Digamos que o usuário vá www.example.com/page.php
e 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.
protection from unauthorized users
redirecionamento; não é assim que as coisas devem ser feitas;)Respostas:
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).2. detalhes importantes
morrer () ou sair ()
Por que você deve usar
die()
ouexit()
: The Daily WTFURL 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 PHP4. 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:
Isso é mais flexível:
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:Ou um redirecionamento de JavaScript mesmo.
fonte
header('Location: '.$newURL);
deve ser antes de qualquer HTML (ou texto) ser passado para o navegador ou não funcionará corretamente.http-equiv="Location"
não é suportado por todos os navegadores. Você deve usar emrefresh
vez disso!<meta http-equiv="refresh" content="0;url=http://example.com/">
Use a
header()
função para enviar um cabeçalho HTTPLocation
: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 :
Resultado de três execuções:
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" oLocation:
cabeçalho. O envio de um cabeçalho não interrompe a execução do PHP, independentemente do cliente usado.fonte
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 precisaexit
. 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..htaccess
para redirecionar, mas preciso de uma maneira de transmitir de alguma forma qual domínio redirecionado para o domínio final?Não se esqueça de morrer () / sair ()!
fonte
Saída de JavaScript do PHP usando echo, que fará o trabalho.
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?
fonte
Cannot modify header information - headers already sent by
erro comum .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()
ouexit()
depois da função de cabeçalho.aqui você não enfrentará nenhum problema
fonte
A maioria dessas respostas está esquecendo um passo muito importante!
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.
fonte
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 + 1Usar:
Ou se você já abriu tags PHP, use o seguinte:
Você também pode redirecionar para páginas externas, por exemplo:
Certifique-se de incluir
exit()
ou incluirdie()
.fonte
Você pode usar variáveis de sessão para controlar o acesso a páginas e autorizar usuários válidos também:
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.
fonte
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 ...
fonte
header( 'Location: http://www.yoursite.com/new_page.html' );
fonte
.htaccess
para redirecionar, mas preciso de uma maneira de transmitir de alguma forma qual domínio redirecionado para o domínio final?Use o seguinte código:
fonte
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 umStatus
cabeçalho definido anteriormente para redirecionar corretamente).Eu também tratada a questão de apoiar os diferentes códigos de redirecionamento de HTTP (
301
,302
,303
e307
), como foi abordada nos comentários da minha resposta anterior. Aqui estão as descrições:fonte
Para redirecionar o visitante para outra página (particularmente útil em um loop condicional), basta usar o seguinte código:
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:
Se alguma vez a página de destino estiver em outro servidor, inclua o URL completo:
Cabeçalhos HTTP
De acordo com o protocolo HTTP, os cabeçalhos HTTP devem receber
before
qualquer 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:
Por exemplo, esta página possui o seguinte código:
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 daexit()
função para diminuir a carga do servidor:fonte
¶
(perto do final do segundo parágrafo)? Você quer dizer em¶
vez disso (para que o todo leiamypage.php?param1=val1¶m2=val2)
)? (A entidade HTML para ) é "¶" - talvez algum programa externo tenha feito uma conversão?).Usar:
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:
fonte
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 ...
fonte
Você pode usar alguns métodos JavaScript como abaixo
self.location="http://www.example.com/index.php";
window.location.href="http://www.example.com/index.php";
document.location.href = 'http://www.example.com/index.php';
window.location.replace("http://www.example.com/index.php");
fonte
Sim, você pode usar a função header () ,
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.fonte
Como outros aqui disseram, enviando o cabeçalho do local com:
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.
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 !!die()
é apenas uma maneira de fazer isso.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
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.
fonte
A melhor maneira de redirecionar com PHP é o seguinte código ...
Verifique se nenhum código funcionará após
Todo o código deve ser executado antes da linha acima.
Suponha,
Caso 1:
Ele será redirecionado corretamente para o local (index.php).
Caso 2:
O código acima não será redirecionado para o local (index.php).
fonte
Sim, é possível usar o PHP. Nós redirecionaremos para outra página.
Tente o seguinte código:
fonte
1. Usando
header
, uma função PHP embutidaa) Redirecionamento simples sem parâmetros
b) Redirecionar com parâmetros GET
2. Redirecione com JavaScript em PHP
a) Redirecionamento simples sem parâmetros
b) Redirecionar com parâmetros GET
fonte
Podemos fazer isso de duas maneiras:
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
Salve o código acima em https://bskud.com/PINCODE/BIHAR/index.php
Quando qualquer condição for verdadeira, redirecione para outra página:
fonte
header()
função PHP .Usar:
fonte
Existem várias maneiras de fazer isso, mas se você preferir
php
, recomendo o uso daheader()
função.Basicamente
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
Você chamará a função para todas as páginas que deseja autenticar.
Como em
page.php
qualquer outra página.Referências;
fonte
Eu gosto do tipo de redirecionamento ao longo do tempo.
fonte
Usando a função de cabeçalho para roteamento
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 exemploB.php
fonte
Se você estiver executando o Apache, também poderá usar o .htaccess para redirecionar.
fonte
Você pode tentar usar a
header
funçã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.fonte
tente este
fonte