2009-10-15 81 views
10

在PHP中重新加載/重定向頁面的最佳方式是徹底刪除所有歷史記錄/緩存?我應該使用哪些標題?在PHP中重定向/重新加載頁面的最佳方式

會發生什麼:

在點擊一個鏈接,獲取參數設置並執行腳本。完成後,我想重定向並重新加載沒有get參數的頁面。起初,它看起來沒有任何事情發生,但是當按F5時,出現了這些變化。

我想要什麼:

重定向和重新加載等等的變化出現不按F5。

+0

您需要更具體。您希望哪些頁面不會出現在歷史記錄中?你打來的那個,還是你正在重定向的那個?緩存也一樣。 – 2009-10-15 12:13:25

回答

3

試試這個:

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

這應該更換瀏覽器歷史記錄,但不緩存。

7

重新加載頁面並強制它不被從緩存中取出的最佳方式是將隨機ID或時間戳添加到URL的末尾作爲查詢字符串。它使請求每次都是唯一的。

+0

這可能是最好的方法,這很奇怪。 想象一下:www.google.com.br?randomId=12381289371 最好的方法應該是發送適當的標題。 – Ismael 2009-10-15 13:43:19

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

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

編輯:

僅可緩存如果 通過一個緩存控制指示或 Expires頭字段此響應。

+1

302是正確的。恭喜。 – Cesar 2009-10-29 17:43:09

+0

這就是我所需要的,我正在做一些完全不同於這個問題的答案,但答案效果很好:) – Jake 2014-01-07 17:42:16

+0

使用更好: header(「Cache-Control:no-cache」); header('Location:http://www.example。com /',true,302); 退出; – 2016-10-22 09:29:43

0

最安全的方法是使用一個頭重定向

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

但要注意,它具有在任何其他輸出發送到瀏覽器發送。

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

感謝@Phill這個答案。你用這個功能爲我節省了很多時間。 – 2012-03-09 12:18:04

+0

嗯。我相信編碼人員應該決定在特定情況下要使用的重定向類型,而不是依賴函數來爲他選擇。例如。如果你想通過'location'獲得一個HTTP請求,那麼你應該確保這個頭文件還沒有被髮送,而不是使用fallback。至少這是我的想法 – Kos 2012-03-30 17:52:20

1

只是信息,與SEO:

301會告訴搜索引擎的索引來替換URL。所以如果url1用301重定向到url2,所有主要的搜索引擎[google,yahoo + bing]都會用url2替換url1。

302以不同的方式工作。它說該網址位於temporarily在其他地址。

see this post

相關問題