在PHP中重新加載/重定向頁面的最佳方式是徹底刪除所有歷史記錄/緩存?我應該使用哪些標題?在PHP中重定向/重新加載頁面的最佳方式
會發生什麼:
在點擊一個鏈接,獲取參數設置並執行腳本。完成後,我想重定向並重新加載沒有get參數的頁面。起初,它看起來沒有任何事情發生,但是當按F5時,出現了這些變化。
我想要什麼:
重定向和重新加載等等的變化出現不按F5。
在PHP中重新加載/重定向頁面的最佳方式是徹底刪除所有歷史記錄/緩存?我應該使用哪些標題?在PHP中重定向/重新加載頁面的最佳方式
會發生什麼:
在點擊一個鏈接,獲取參數設置並執行腳本。完成後,我想重定向並重新加載沒有get參數的頁面。起初,它看起來沒有任何事情發生,但是當按F5時,出現了這些變化。
我想要什麼:
重定向和重新加載等等的變化出現不按F5。
試試這個:
echo '<script>document.location.replace("someurl.php");</script>';
這應該更換瀏覽器歷史記錄,但不緩存。
重新加載頁面並強制它不被從緩存中取出的最佳方式是將隨機ID或時間戳添加到URL的末尾作爲查詢字符串。它使請求每次都是唯一的。
這可能是最好的方法,這很奇怪。 想象一下:www.google.com.br?randomId=12381289371 最好的方法應該是發送適當的標題。 – Ismael 2009-10-15 13:43:19
header('Location: http://example.com/path/to/file');
header('Location: http://www.example.com/', true, 302);
exit;
價:http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
編輯:
僅可緩存如果 通過一個緩存控制指示或 Expires頭字段此響應。
最安全的方法是使用一個頭重定向
header('Location: http://www.example.com/', true, 302);
exit;
但要注意,它具有在任何其他輸出發送到瀏覽器發送。
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);
感謝@Phill這個答案。你用這個功能爲我節省了很多時間。 – 2012-03-09 12:18:04
嗯。我相信編碼人員應該決定在特定情況下要使用的重定向類型,而不是依賴函數來爲他選擇。例如。如果你想通過'location'獲得一個HTTP請求,那麼你應該確保這個頭文件還沒有被髮送,而不是使用fallback。至少這是我的想法 – Kos 2012-03-30 17:52:20
只是信息,與SEO:
301會告訴搜索引擎的索引來替換URL。所以如果url1用301重定向到url2,所有主要的搜索引擎[google,yahoo + bing]都會用url2替換url1。
302以不同的方式工作。它說該網址位於temporarily
在其他地址。
您需要更具體。您希望哪些頁面不會出現在歷史記錄中?你打來的那個,還是你正在重定向的那個?緩存也一樣。 – 2009-10-15 12:13:25