2009-10-15 10 views
10

Qual è il modo migliore per ricaricare/reindirizzare una pagina in PHP che rimuove completamente tutta la cronologia/cache? Quali intestazioni dovrei usare?modo migliore reindirizzare/ricaricare le pagine in PHP

Cosa succede:

Su clic su un collegamento, Get-parametri è impostato e viene eseguito uno script. Al termine, desidero reindirizzare e ricaricare la pagina senza i parametri get. All'inizio sembra che non sia successo nulla, ma quando si preme F5, appaiono le modifiche.

quello che voglio:

Redirect e ricaricare in modo che i cambiamenti sembrano senza premere F5.

+0

Devi essere più specifico. Quale pagina non vuoi visualizzare nella cronologia? Quello da cui stai chiamando o quello verso cui stai reindirizzando? Lo stesso vale per il cache. –

risposta

3

Prova questo:

echo '<script>document.location.replace("someurl.php");</script>'; 

Questo dovrebbe sostituire la cronologia del browser, ma non cache.

7

Il modo migliore per ricaricare una pagina e forzarla a non essere prelevato dalla cache sarà aggiungere un id casuale o un timestamp alla fine dell'URL come querystring. Rende la richiesta unica ogni volta.

+0

Può essere il modo migliore, è strano farlo. Immagina: www.google.com.br?randomId=12381289371 Il modo migliore dovrebbe essere inviare intestazioni appropriate. – Ismael

1
header('Location: http://example.com/path/to/file'); 
26
header('Location: http://www.example.com/', true, 302); 
exit; 

Rif: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

modifica:

Questa risposta è soltanto cacheable se indicato da un Cache-Control o Expires campo.

+1

302 è corretto. Complimenti. – Cesar

+0

Questo è proprio quello di cui avevo bisogno, stavo facendo qualcosa di completamente diverso a questa domanda ma la risposta ha funzionato benissimo :) – Jake

+0

meglio usare: intestazione ("Cache-Control: no-cache"); intestazione ('Posizione: http: //www.esempio.com/', vero, 302); uscita; –

0

Il modo più sicuro è quello di utilizzare un'intestazione reindirizzamento

header('Location: http://www.example.com/', true, 302); 
exit; 

Ma attenzione, che deve essere inviato prima di qualsiasi altro output viene inviato al browser.

24
function redirect($url) { 
    if(!headers_sent()) { 
     //If headers not sent yet... then do php redirect 
     header('Location: '.$url); 
     exit; 
    } else { 
     //If headers are sent... do javascript redirect... if javascript disabled, do html redirect. 
     echo '<script type="text/javascript">'; 
     echo 'window.location.href="'.$url.'";'; 
     echo '</script>'; 
     echo '<noscript>'; 
     echo '<meta http-equiv="refresh" content="0;url='.$url.'" />'; 
     echo '</noscript>'; 
     exit; 
    } 
} 

// How to use 
$url = "www.google.com"; 
redirect($url); 
+0

Grazie a @Phill per questa risposta. Mi hai risparmiato un sacco di tempo con questa funzione. –

+0

Hm. Credo che il programmatore dovrebbe decidere quale tipo di reindirizzamento vuole utilizzare in una determinata situazione, non fare affidamento su una funzione da scegliere per lui. Per esempio. se vuoi una richiesta HTTP tramite 'location', assicurati che le intestazioni non siano ancora state inviate, piuttosto che usare fallback se lo fossero. Ecco come penso almeno – Kos

1

solo per informazioni, correlati a SEO:

301 avrebbe detto motore di ricerca per sostituire URL nel loro indice. quindi se url1 sta reindirizzando a url2 con 301, tutti i principali motori di ricerca [google, yahoo + bing] sostituiranno url1 con url2.

302 funziona in modo diverso. Dice l'url si trova temporarily in qualche altro indirizzo.

see this post

Problemi correlati