2009-10-15 14 views
10

Jaki jest najlepszy sposób na przeładowanie/przekierowanie strony w PHP, która całkowicie usuwa całą historię/pamięć podręczną? Których nagłówków powinienem użyć?najlepszy sposób przekierowywania/ładowania stron w PHP

Co się dzieje:

Po kliknięciu linku, get-parametrów jest ustawiony i skrypt jest wykonywany. Po zakończeniu chcę przekierować i wczytać stronę bez parametrów get. Na początku wygląda na to, że nic się nie stało, ale po naciśnięciu F5 pojawią się zmiany.

Czego chcę:

Przekierowanie i przeładować więc pojawiają się zmiany bez wciskania F5.

+0

Musisz być bardziej szczegółowy. Której strony nie chcesz umieścić w historii? Ten, z którego dzwonisz, lub do którego przekierowujesz? To samo dotyczy pamięci podręcznej. –

Odpowiedz

3

Spróbuj tego:

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

ten powinien zastąpić historię przeglądarki, ale nie pamięć.

7

Najlepszym sposobem na ponowne załadowanie strony i wymuszenie jej nie pobierania z pamięci podręcznej będzie dołączanie losowego identyfikatora lub znacznika czasu na końcu adresu URL w postaci zapytania o znak zapytania. Dzięki temu prośba jest wyjątkowa za każdym razem.

+0

To może być najlepszy sposób, dziwnie to zrobić. Wyobraź sobie: www.google.com.br?randomId=12381289371 Najlepszym sposobem jest wysłanie odpowiednich nagłówków. – 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:

Ta odpowiedź jest tylko buforowalny jeśli sygnalizowane Cache-Control lub Wygasa pole nagłówka.

+1

302 jest poprawna. Gratulacje. – Cesar

+0

To jest właśnie to, czego potrzebowałem, robiłem coś zupełnie innego na to pytanie, ale odpowiedź działała świetnie :) – Jake

+0

lepiej używać: nagłówek ("Cache-Control: no-cache"); nagłówek ("Lokalizacja: http: //www.example.com/", true, 302); exit; –

0

Najbezpieczniejszym sposobem jest użycie przekierowanie nagłówka

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

Ale uwaga, że ​​to musi być wysłane przed innymi dane zostaną wysłane do przeglądarki.

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

Dzięki @Phill za tę odpowiedź. Dzięki tej funkcji zaoszczędziłeś mi mnóstwo czasu. –

+0

Hm. Uważam, że programista powinien zdecydować, jakiego typu przekierować, którego chce użyć w danej sytuacji, a nie polegać na funkcji do wyboru dla niego. Na przykład. jeśli chcesz otrzymać żądanie HTTP za pomocą 'location', powinieneś upewnić się, że nagłówki nie zostały jeszcze wysłane, zamiast korzystać z alternatyw, jeśli takowe były. Tak przynajmniej myślę – Kos

1

tylko dla informacji, związane z SEO:

301 powie wyszukiwarki, by zastąpić URL w indeksie. więc jeśli url1 przekierowuje do url2 z 301, cała główna wyszukiwarka [google, yahoo + bing] zastąpi url1 url2.

302 działa w różny sposób. Mówi, że adres URL znajduje się pod innym adresem.

see this post

Powiązane problemy