在PHP中重定向/重新加载页面的最佳方法

时间:2009-10-15 12:09:28

标签: php redirect reload

什么是在PHP中重新加载/重定向页面的最佳方法,它完全删除了所有历史记录/缓存?我应该使用哪些标题?

会发生什么:

单击链接时,将设置get-parameters并执行脚本。完成后,我想重定向并重新加载没有get参数的页面。起初,它看起来没有发生任何事情,但是当按下F5时,会出现更改。

我想要的是什么:

重定向并重新加载,以便在不按F5的情况下显示更改。

8 个答案:

答案 0 :(得分:26)

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

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

编辑:

  

此响应只有在缓存时才可以缓存   由Cache-Control或表示   过期标题字段。

答案 1 :(得分: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);

答案 2 :(得分:7)

重新加载页面并强制它不从缓存中获取的最佳方法是将随机ID或时间戳作为查询字符串追加到URL的末尾。它使请求每次都是唯一的。

答案 3 :(得分:3)

试试这个:

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

这应该取代浏览器历史记录而不是缓存。

答案 4 :(得分:1)

header('Location: http://example.com/path/to/file');

答案 5 :(得分:1)

仅供参考与SEO相关的信息:

301会告诉搜索引擎在其索引中替换url。所以如果url1用301重定向到url2,那么所有主流搜索引擎[google,yahoo + bing]都会用url2替换url1。

302以不同的方式工作。它说网址位于temporarily的其他地址。

see this post

答案 6 :(得分:1)

<?php
header('Cache-Control: no-store, private, no-cache, must-revalidate');     // HTTP/1.1
header('Cache-Control: pre-check=0, post-check=0, max-age=0, max-stale = 0', false);  // HTTP/1.1
header('Pragma: public');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');                  // Date in the past  
header('Expires: 0', false); 
header('Last-Modified: '.gmdate('D, d M Y H:i:s') . ' GMT');
header ('Pragma: no-cache');
header("Location: https://example.com", true, 302);
exit();
?>

答案 7 :(得分:0)

最安全的方法是使用标题重定向

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

但要注意,必须在将任何其他输出发送到浏览器之前发送它。