Come faccio a reindirizzare in PHP?


1262

È possibile reindirizzare un utente a una pagina diversa tramite PHP?

Supponiamo che l'utente vada a www.example.com/page.phpe lo desideri reindirizzare a www.example.com/index.php, come potrei farlo senza l'uso di un meta-aggiornamento? È possibile?

Questo potrebbe persino proteggere le mie pagine da utenti non autorizzati.


Puoi aggiornare l'intestazione in PHP: header
Zack Marrapese il

11
@Sam: proprio come nodo laterale, non implementare alcun tipo di protection from unauthorized usersreindirizzamento; non è così che vanno fatte le cose;)
Strae,

7
@Strae Cosa c'è di sbagliato nella protezione delle pagine con il reindirizzamento? Allora qual è il modo migliore?

6
Il reindirizzamento di @PravindaAmarathunga è uno degli elementi, ma non l'unico. Assicurati solo che gli elementi protetti non vengano affatto emessi per utenti non autorizzati; Il reindirizzamento del browser può essere disabilitato sul lato client, ad esempio: se il browser non esegue il reindirizzamento e la pagina originale viene emessa normalmente, cosa vedrebbe l'utente? CMS di solito esegue il reindirizzamento e non stampa articoli protetti, sostituendo l'output normale con un messaggio di cortesia.
Strae

@PravindaAmarathunga controlla il link dalla risposta di markus: thedailywtf.com/Articles/WellIntentioned-Destruction.aspx
Strae

Risposte:


1699

Riepilogo delle risposte esistenti più i miei due centesimi:

1. Risposta di base

È possibile utilizzare la header()funzione per inviare una nuova intestazione HTTP, ma questa deve essere inviata al browser prima di qualsiasi HTML o testo (quindi prima della <!DOCTYPE ...>dichiarazione, ad esempio).

header('Location: '.$newURL);

2. Dettagli importanti

die () o exit ()

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

Perché dovresti usare die()o exit(): Il Daily WTF

URL assoluto o relativo

Da giugno 2014 è possibile utilizzare sia URL assoluti che relativi. Vedi RFC 7231 che aveva sostituito il vecchio RFC 2616 , dove erano consentiti solo URL assoluti.

Codici di stato

L'intestazione "Posizione" di PHP utilizza ancora il codice diretto HTTP 302 , ma questo non è quello che dovresti usare. Dovresti considerare 301 (reindirizzamento permanente) o 303 (altro).

Nota: W3C menziona che l'intestazione 303 è incompatibile con "molti agenti utente pre-HTTP / 1.1. I browser attualmente utilizzati sono tutti agenti utente HTTP / 1.1. Questo non è vero per molti altri agenti utente come ragni e robot.

3. Documentazione

Intestazioni HTTP e la header()funzione in PHP

4. Alternative

È possibile utilizzare il metodo alternativo di http_redirect($url);cui è necessario installare il pacchetto PECL pecl .

5. Funzioni di supporto

Questa funzione non incorpora il codice di stato 303:

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

    exit();
}

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

Questo è più flessibile:

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

6. Soluzione alternativa

Come accennato, i header()reindirizzamenti funzionano solo prima che qualcosa venga scritto. Di solito falliscono se invocati in mezzo all'output HTML . Quindi potresti usare una soluzione alternativa all'intestazione HTML (non molto professionale!) Come:

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

O anche un reindirizzamento JavaScript.

window.location.replace("http://example.com/");

5
Alcuni problemi con questa risposta: 303 potrebbe non essere il codice di stato "corretto". 301 potrebbe essere desiderato per Google, ad esempio. In secondo luogo, header('Location: '.$newURL);deve essere prima che qualsiasi HTML (o testo) sia stato passato al browser, o non funzionerà correttamente.
Chuck Le Butt,

6
La storia quotidiana del WTF è tristemente comune. Ad ogni modo, non è la matrice mancante ciò che causa il problema, ma un cattivo design. La chiusura violenta del processo è errata nel 99,9% dei casi. Una soluzione comune e più pulita (comunque non la mia preferita) è lanciare una RedirectionException e catturarla sul punto di ingresso dell'applicazione. Dopodiché puoi avere tutte le tue chiamate "after *" (registri / chiudi connessioni / qualunque cosa)
robertodecurnex

4
Il http-equiv="Location"non è supportato da tutti i browser. Dovresti usare refreshinvece! <meta http-equiv="refresh" content="0;url=http://example.com/">
Timo002,

71
Non emettere mai un 301 a meno che tu non lo intenda . 301 significa permanente e permanente significa permanente , il che significa che verrà memorizzato nella cache dagli agenti utente, il che significa notti lunghe e piene di caffeina che fissano i registri delle applicazioni chiedendosi se stai impazzendo perché giuri che una pagina avrebbe dovuto essere chiamata o aggiornata e lo giuri a Dio funziona sulla tua macchina ma non su quella del cliente. Se devi assolutamente chiamare un 301, inserisci un limite massimo di controllo della cache sulla risorsa. Non hai saggezza infinita e non dovresti comportarti come fai tu.
madumlao,

2
Ma c'è un motivo per usare die over exit? l'uscita sembra più pulita e più appropriata.
ars265,

122

Utilizzare la header()funzione per inviare un'intestazione HTTPLocation :

header('Location: '.$newURL);

Contrariamente a quanto alcuni pensano, die()non ha nulla a che fare con il reindirizzamento. Usalo solo se vuoi reindirizzare invece della normale esecuzione.

File example.php :

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

Risultato di tre esecuzioni:

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

Riprendere - obbligatorio die()/ exit()è una leggenda urbana che non ha nulla a che fare con il vero PHP. Non ha nulla a che fare con il client che "rispetta" l' Location:intestazione. L'invio di un'intestazione non interrompe l'esecuzione di PHP, indipendentemente dal client utilizzato.


8
die () o exit () è per i clienti che non rispettano l'intestazione "Posizione: ..."
clawr

12
@clawr: No, exit()è per impedire alla pagina di mostrare il contenuto rimanente (pensa alle pagine con restrizioni). vartec ha ragione, non ha nulla a che fare con l'intestazione della posizione HTTP e non è necessario exit. Ho scelto di includerlo nella mia risposta perché, per qualcuno che non sa come fare un semplice reindirizzamento, si potrebbe anche giocare in modo sicuro piuttosto che non implementare un passaggio semplice ma cruciale solo per poter trarre vantaggio da un processo avanzato controllo.
Alix Axel,

1
Ma i browser che rispettano l'intestazione lasceranno la pagina e chiuderanno la connessione mentre lo script è ancora in esecuzione. Questo è totalmente negativo. PHP continuerà con lo script per qualche tempo (ecco perché il tuo codice viene eseguito) ma potrebbe interromperlo in modo casuale nel mezzo dell'esecuzione, lasciando cose rotte. Chiamare ignore_user_abort () lo impedirà, ma sinceramente non ne vale la pena. Continua con le tue cose di scrittura HTML (anche se probabilmente inutili) ma non fare cose che scrivono su disco o database dopo un'intestazione ('Posizione:'); Scrivi su disco prima del reindirizzamento, se possibile. [Inoltre: l'URL dovrebbe essere assoluto.]
FrancescoMM

c'è un modo per reindirizzare prima che il browser rilevi il protocollo HTTP? il motivo per cui devo reindirizzare è perché non riesco a ottenere abbastanza certificati SSL per tutti i miei domini. userei .htaccessper reindirizzare, ma ho bisogno di un modo per passare in qualche modo su quale dominio reindirizzato al dominio finale?
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);

Non dimenticare di morire () / exit ()!


6
E non dimenticare il buffering dell'output o finirai con "Headers già inviati".
Kuroki Kaze,

8
... e non dimenticare di stampare in qualche modo come "verrai reindirizzato a $ nepage in $ n secondi, fai clic sul link $ qui se non si verifica il reindirizzamento" Alcuni broser e alcune impostazioni del browser potrebbero non riuscire a reindirizzare.
Strae,

3
@DaNieL: questo tipo di reindirizzamento non richiederà "$ n secondi". Sarà istantaneo se accadrà affatto e qualsiasi browser conforme dovrebbe gestirlo. Penso che stai pensando ai reindirizzamenti "meta refresh" che le persone usano quando non conoscono meglio.
rmeador,

1
@rmeador ... Per browser meno recenti e browser speciali. Dovresti prima fare l'intestazione Location, se fallisce avere un meta-reindirizzamento con "verrai reindirizzato alla pagina in x secondi" con un link nel caso in cui il meta-reindirizzamento fallisca. Questo è il modo corretto e sicuro di fare un reindirizzamento.
Andrew Moore,

3
Andrew: come può il browser HTTP non rispettare la posizione :?
vartec,

102

Invia JavaScript da PHP usando echo, che farà il lavoro.

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

Non puoi davvero farlo in PHP a meno che non esegua il buffer dell'output della pagina e successivamente controlli la condizione di reindirizzamento. Potrebbe essere una seccatura. Ricorda che le intestazioni sono la prima cosa che viene inviata dalla pagina. La maggior parte del reindirizzamento è in genere richiesta più avanti nella pagina. Per questo devi bufferizzare tutto l'output della pagina e verificare la condizione di reindirizzamento in seguito. A quel punto puoi reindirizzare l'intestazione dell'utente della pagina () o semplicemente fare eco all'output bufferizzato.

Per ulteriori informazioni sul buffering (vantaggi)

Che cos'è il buffering dell'output?


2
Risposta semplice e precisa! Ottimo per un semplice reindirizzamento della pagina!
Stathis Andronikos,

E in questo modo non si verifica l' Cannot modify header information - headers already sent byerrore comune .
Kai Noack,

1
@hmd, cosa succede se javascript è disabilitato?
Istiaque Ahmed,

@IstiaqueAhmed javascript è quasi sempre abilitato in questi giorni ma se è disabilitato puoi usare il buffer PHP. Questa domanda SO risponde a questo. Se stai usando il PHP Buffering, non ho bisogno di questo metodo.
Hammad Khan,

Falso, puoi (e dovresti) farlo in PHP anche senza buffering: in una pagina ben progettata tutta l'elaborazione PHP pertinente dovrebbe avvenire prima che qualsiasi contenuto HTML venga inviato all'utente. In questo modo i reindirizzamenti PHP funzioneranno bene.
MestreLion,

91

1. Utilizzo della funzione header con exit()

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

ma se usi la funzione header allora alcune volte riceverai "avvertimento come header già inviato" per risolvere che non riecheggia o stampa prima di inviare le intestazioni o puoi semplicemente usare die()o exit()dopo la funzione header.

2. Senza intestazione

<?php 
    echo "<script>location.href='target-page.php';</script>";
?>

qui non dovrai affrontare alcun problema

3. Utilizzo della funzione header con 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
?>

Lavora come un fascino. Uso <? Php echo "<script> location.href = ' google.fr /'; </script >"; ?> Per testarlo, e ha fatto quello che volevo
DoctorDroid Haiti,

1
La seconda soluzione non funzionerà con JS disabilitato.
Tajni,

55

La maggior parte di queste risposte sta dimenticando un passaggio molto importante!

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

Lasciare quella seconda linea vitale potrebbe vederti finire su The Daily WTF . Il problema è che i browser non devono rispettare le intestazioni restituite dalla tua pagina, quindi con le intestazioni ignorate, il resto della pagina verrà eseguito senza reindirizzamento.


1
Che ne dici di dare un output all'utente prima di uccidere lo script? Sai, alla gente piace sapere cosa sta succedendo ...
Strae,

3
stai assumendo che lo script non abbia altro da fare se non il reindirizzamento. Il che potrebbe non essere affatto vero.
vartec,

13
@DaNieL: cambialo per morire ("Smetti di ignorare le mie intestazioni!")
nickf

3
Mi è piaciuta quella semplice spiegazione che die();hai dato: se non lo fai, l'utente potrebbe vedere la pagina completa per un momento se la usi; l'utente verrà reindirizzato e nessun glitch di contenuto temporaneo mostrerà + 1
TheBlackBenzKid

È possibile che si verifichino attività utili dopo l'invio dell'intestazione, attività che non invia nulla al browser, ma registra l'attività o termina la registrazione delle transazioni. Per questo motivo, la necessità di die / exit dipende dallo script.
Dan Allll

28

Uso:

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

O se hai già aperto i tag PHP, usa questo:

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

Puoi anche reindirizzare a pagine esterne, ad esempio:

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

Assicurati di includere exit()o includere die().


25

Puoi utilizzare le variabili di sessione per controllare l'accesso alle pagine e autorizzare anche utenti validi:

<?php
    session_start();

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

    // Page goes here
?>

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

Di recente, ho ricevuto attacchi informatici e ho deciso che dovevo conoscere gli utenti che cercavano di accedere al Pannello di amministrazione o alla parte riservata dell'applicazione Web.

Quindi, ho aggiunto un accesso al registro per l'indirizzo IP e le sessioni utente in un file di testo, perché non voglio disturbare il mio database.


19

Molte di queste risposte sono corrette, ma presumono che tu abbia un URL assoluto, il che potrebbe non essere il caso. Se vuoi usare un URL relativo e generare il resto, puoi fare qualcosa del genere ...

$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

16

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


c'è un modo per reindirizzare prima che il browser rilevi il protocollo HTTP? il motivo per cui devo reindirizzare è perché non riesco a ottenere abbastanza certificati SSL per tutti i miei domini. userei .htaccessper reindirizzare, ma ho bisogno di un modo per passare in qualche modo su quale dominio reindirizzato al dominio finale?
oldboy

16

Usa il seguente codice:

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

14

Ho già risposto a questa domanda, ma lo farò di nuovo poiché nel frattempo ho imparato che ci sono casi speciali se stai eseguendo l'interfaccia della riga di comando (i reindirizzamenti non possono avvenire e quindi non dovrebbero exit()) o se il tuo server web è eseguire PHP come CGI (F) ( Statusper reindirizzare correttamente è necessaria un'intestazione precedentemente impostata ).

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

Ho anche gestito la questione di sostenere i diversi codici di reindirizzamento HTTP ( 301, 302, 303e 307), come è stato affrontato nei commenti della mia risposta precedente. Ecco le descrizioni:

  • 301 - Spostato in modo permanente
  • 302 - Trovato
  • 303 - Vedi Altro
  • 307 - Reindirizzamento temporaneo (HTTP / 1.1)

11

Per reindirizzare il visitatore su un'altra pagina (particolarmente utile in un ciclo condizionale), utilizzare semplicemente il seguente codice:

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

In questo caso, mypage.phpè l'indirizzo della pagina a cui desideri reindirizzare i visitatori. Questo indirizzo può essere assoluto e può anche includere i parametri in questo formato:mypage.php?param1=val1&m2=val2)

Percorso relativo / assoluto

Quando si ha a che fare con percorsi relativi o assoluti, è ideale scegliere un percorso assoluto dalla radice del server (DOCUMENT_ROOT). Usa il seguente formato:

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

Se la pagina di destinazione si trova su un altro server, includi l'URL completo:

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

Intestazioni HTTP

Secondo il protocollo HTTP, è necessario inviare le intestazioni HTTP before qualsiasi tipo di contenuto. Ciò significa che nessun personaggio dovrebbe mai essere inviato prima dell'intestazione, nemmeno uno spazio vuoto!

Reindirizzamenti temporanei / permanenti

Per impostazione predefinita, il tipo di reindirizzamento presentato sopra è temporaneo. Ciò significa che i motori di ricerca, come Ricerca Google, non terranno conto del reindirizzamento durante l'indicizzazione.

Se desideri informare i motori di ricerca che una pagina è stata spostata in modo permanente in un'altra posizione, utilizza il seguente codice:

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

Ad esempio, questa pagina ha il seguente codice:

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

Quando fai clic sul link sopra, verrai automaticamente reindirizzato a questa pagina. Inoltre, è un reindirizzamento permanente (Stato: 301 spostato in modo permanente). Pertanto, se digiti il ​​primo URL in Google, verrai automaticamente reindirizzato al secondo link reindirizzato.

Interpretazione del codice PHP

Il codice PHP situato dopo l'intestazione () verrà interpretato dal server, anche se il visitatore si sposta all'indirizzo specificato nel reindirizzamento. Nella maggior parte dei casi, ciò significa che è necessario un metodo per seguire la header()funzione della exit()funzione al fine di ridurre il carico del server:

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

Perché (vicino alla fine del secondo paragrafo)? Intendi &parainvece (così dice tutto mypage.php?param1=val1&param2=val2))? (L'entità HTML para ) è "¶" - forse qualche programma esterno ha fatto una conversione?).
Peter Mortensen,

9

Uso:

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

Questo è un reindirizzamento PHP normale e normale, ma puoi fare in modo che una pagina di reindirizzamento con alcuni secondi attenda il codice seguente:

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

7

Alla vigilia della rete semantica, la correttezza è qualcosa da considerare. Sfortunatamente, l'intestazione "Posizione" di PHP utilizza ancora il codice diretto HTTP 302 , che, rigorosamente, non è il migliore per il reindirizzamento. Quello che dovrebbe usare invece è il 303 .

Il W3C è abbastanza gentile da menzionare che l'intestazione 303 è incompatibile con "molti agenti utente pre-HTTP / 1.1", che equivarrebbe a nessun browser nell'uso corrente. Quindi, il 302 è una reliquia, che non dovrebbe essere usata.

... o potresti semplicemente ignorarlo, come tutti gli altri ...


7

È possibile utilizzare alcuni metodi JavaScript come di seguito

  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");


Javascript viene eseguito sul client che potrebbe essere o meno ciò che stai cercando.
Chharvey,

7

Sì, puoi usare la funzione header () ,

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

Inoltre, è consigliabile chiamare la funzione exit () subito dopoheader() funzione per evitare l'esecuzione del codice seguente.

Secondo la documentazione, header()deve essere chiamato prima di inviare qualsiasi output effettivo.


6

Come altri qui hanno detto, inviando l'intestazione della posizione con:

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

ma devi farlo prima di aver inviato qualsiasi altro output al browser.

Inoltre, se lo utilizzerai per bloccare utenti non autenticati da determinate pagine, come hai menzionato, tieni presente che alcuni agenti utente lo ignoreranno e continueranno comunque sulla pagina corrente, quindi dovrai morire ( ) dopo averlo inviato.


but you need to do it before you've sent any other output to the browser. Eccezionale!! Sono stato alla ricerca di minuti sul motivo per cui continuavo a ricevere le intestazioni già inviate errore. +1 !!
josh

Più in generale, hai / interrompi completamente lo script /. die()è solo un modo per farlo.
MauganRa,

6

Ecco i miei pensieri:

IMHO, il modo migliore per reindirizzare una richiesta in arrivo sarebbe usando le intestazioni di posizione, che vanno

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

Una volta eseguita questa affermazione e inviato l'output, il browser inizierà a reindirizzare l'utente. Tuttavia, assicurarsi che non vi sia stato alcun output (alcun echo / var_dump) prima di inviare le intestazioni, altrimenti si verificheranno errori.

Anche se questo è un modo rapido e sporco per ottenere ciò che era stato inizialmente richiesto, alla fine si rivelerebbe un disastro SEO, poiché questo tipo di reindirizzamento viene sempre interpretato come un reindirizzamento 301/302, quindi i motori di ricerca vedranno sempre il tuo indicizzare la pagina come una pagina reindirizzata e non qualcosa di una pagina di destinazione / pagina principale.

Quindi influenzerà le impostazioni SEO del sito Web.


1
exit () dovrebbe essere usato immediatamente dopo l'intestazione ()
EKanadily,

@docesam .. concordato .. exit () dovrebbe essere chiamato immediatamente dopo la chiamata header (). Tuttavia, credo che, se non ci sarà più output per il browser dopo questa dichiarazione di intestazione (), exit () potrebbe non essere necessario - Solo la mia opinione
Bhaskar Pramanik,

sì, ma devi spiegarlo perché qualcuno potrebbe copiare la tua riga di codice nel suo script e ciò può potenzialmente causare lunghi periodi di girarsi intorno a se stesso per capire cosa è andato storto.
EKanadily,

1
@BhaskarPramanik immagina di dover chiudere rapidamente una porta, ma poi devi tirarli / spingerli / romperli di nuovo per assicurarti che sia già bloccata o meno ..
come

5

Il modo migliore per reindirizzare con PHP è il seguente codice ...

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

Assicurarsi che nessun codice funzioni dopo

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

Tutto il codice deve essere eseguito prima della riga sopra.

Supponiamo,

Caso 1:

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

Reindirizzerà correttamente alla posizione (index.php).

Caso 2:

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

Il codice sopra riportato non reindirizzerà alla posizione (index.php).


Esiste già una risposta con 1085 che contiene le informazioni fornite, oltre a molte altre.
Patrick Hund,

5

Sì, è possibile utilizzare PHP. Reindirizzeremo a un'altra pagina.

Prova il seguente codice:

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

4

1. Utilizzo di headeruna funzione PHP integrata

a) Reindirizzamento semplice senza parametri

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

b) Reindirizzare con i parametri GET

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

2. Reindirizzamento con JavaScript in PHP

a) Reindirizzamento semplice senza parametri

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

b) Reindirizzare con i parametri GET

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

Il bit javascript in qualche modo era l'unica cosa che funzionava nell'hosting finale del sito; Credo che sia una questione di memorizzazione nella cache, ma con ciò l'ho risolto immediatamente.
cdsaenz,

3

Possiamo farlo in due modi:

  1. Quando l'utente arriva su https://bskud.com/PINCODE/BIHAR/index.php, reindirizza a https://bskud.com/PINCODE/BIHAR.php

    Con il seguente codice PHP

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

    Salvare il codice sopra in https://bskud.com/PINCODE/BIHAR/index.php

  2. Quando una condizione è vera, reindirizza a un'altra pagina:

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

Cos'è questo? Si prega di non utilizzare collegamenti al proprio sito Web. E il secondo esempio usa il reindirizzamento JavaScript e non la header()funzione PHP .
Scriptman

2

Uso:

<?php
    $url = "targetpage"
    function redirect$url(){
        if (headers_sent()) == false{
            echo '<script>window.location.href="' . $url . '";</script>';
        }
    }
?>

1
Potresti spiegare la funzione del tuo codice? La tua risposta è stata contrassegnata per la sua lunghezza e contenuto.
www139,

2

Esistono diversi modi per farlo, ma se preferisci php, consiglierei l'uso della header()funzione.

Fondamentalmente

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

Se vuoi alzare un livello, è meglio usarlo nelle funzioni. In questo modo, puoi aggiungere autenticazioni e altri elementi di controllo.

Proviamo controllando il livello dell'utente.

Supponiamo quindi di aver memorizzato il livello di autorità dell'utente in una sessione chiamata u_auth.

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

     . . .

Chiamerai quindi la funzione per ogni pagina che desideri autenticare.

Come in page.phpo in qualsiasi altra pagina.

<?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”);

    . . .

Riferimenti;


2

Mi piace il tipo di reindirizzamento nel tempo.

<?php

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

2

Utilizzo della funzione header per il routing

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

Supponiamo di voler instradare dal file A.php a B.php di quanto dobbiamo prendere in aiuto <button>o <a>. Vediamo un esempio

<?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>

Potete fornire la soluzione accurata o buona?
Mehedi Abdullah

Esistono già molte soluzioni. La tua soluzione ha misto HTML e PHP senza tag PHP. In secondo luogo, si invia l'intestazione dopo aver stampato il codice html, quindi non funzionerà. E il nome dei file di esempio è errato. Non dovresti chiamarli A.php e B.php. So che è solo un esempio, ma dovresti comunque preoccuparti della convenzione di denominazione.
Tajni

1

Se usi Apache puoi anche usare .htaccess per il reindirizzamento.

Redirect 301 / http://new-site.com/

1

Puoi provare a usare la headerfunzione PHP per eseguire il reindirizzamento. Dovrai impostare il buffer di output in modo che il tuo browser non emetta un avviso di reindirizzamento sullo schermo.

ob_start();
header("Location: " . $website);
ob_end_flush();

1
exit () dovrebbe essere usato immediatamente dopo l'intestazione (). anche il buffering è attivo automaticamente da qualche tempo.
EKanadily,

0

prova questo

 $url = $_SERVER['HTTP_REFERER'];
 redirect($url);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.