2009-10-15 14 views
10

¿Cuál es la mejor manera de volver a cargar/redirigir una página en PHP que elimina por completo todo el historial/caché? ¿Qué encabezados debo usar?mejor manera de redirigir/cargar páginas en PHP

Lo que sucede:

Al hacer clic en un enlace, Get-parámetros se establece y se ejecuta un script. Cuando termine, quiero redirigir y volver a cargar la página sin los parámetros get. Al principio, parece que no pasó nada, pero al presionar F5, aparecen los cambios.

lo que quiero:

redirección y volver a cargar por lo que los cambios aparecen sin pulsar F5.

+0

Tiene que ser más específico. ¿Qué página quieres que no aparezca en la historia? ¿El que está llamando o el que está redirigiendo? Lo mismo ocurre con el caché. –

Respuesta

3

Prueba esto:

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

Esto debería reemplazar el historial del navegador, pero no caché.

7

La mejor manera de volver a cargar una página y forzarla a que no se tome de la memoria caché será agregar una identificación aleatoria o marca de tiempo al final de la url como cadena de consulta. Hace que la solicitud sea única cada vez.

+0

Puede ser la mejor manera, es extraño hacer esto. Imagine: www.google.com.br?randomId=12381289371 La mejor manera se debe enviar encabezados apropiados. – Ismael

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

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

edit:

Esta respuesta es solamente cacheable si indicado por un Cache-Control o Expira campo de encabezado.

+1

302 es correcto. Felicitaciones. – Cesar

+0

Esto es justo lo que necesitaba, estaba haciendo algo completamente diferente a esta pregunta, pero la respuesta funcionó muy bien :) – Jake

+0

mejor usar: header ("Cache-Control: no-cache"); header ('Ubicación: http: //www.example.com/', cierto, 302); salida; –

0

La forma más segura es utilizar un encabezado de redirección

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

Pero ojo, que tiene que ser enviado antes que cualquier otra salida se envía al navegador.

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

Gracias @Phill por esta respuesta. Me ahorraste mucho tiempo con esta función. –

+0

Hm. Creo que el codificador debería decidir qué tipo de redirigir desea usar en una situación determinada, no depender de una función para elegir. P.ej. si desea una solicitud HTTP a través de 'ubicación', entonces debe asegurarse de que los encabezados no se hayan enviado aún, en lugar de utilizar los repliegues en caso de que lo estén. Así es como pienso al menos – Kos

1

sólo para información, relacionada con SEO:

301 diría motor de búsqueda para reemplazar url en su índice. así que si url1 está redireccionando a url2 con 301, todos los principales motores de búsqueda [google, yahoo + bing] reemplazarían a url1 con url2.

302 funciona de manera diferente. Dice que la url se encuentra temporarily en alguna otra dirección.

see this post

Cuestiones relacionadas