编程语言
首页 > 编程语言> > php – 如何进行非缓存的301重定向?

php – 如何进行非缓存的301重定向?

作者:互联网

前一段时间所有的浏览器都改变了他们的行为并开始缓存301重定向,我想知道如何做一个没有缓存在php中的301重定向?

解决方法:

301是永久重定向,因此缓存是有意义的.如果您的重定向不是永久性的,请使用307(临时重定向),302(找到)或303(见其他).

See here为适当的用例.

详细说明这三者之间的差异:

> 307是资源移动时的通用临时重定向.例如,像domain.com/news/latest这样的网址可能会重定向到最新的新闻文章domain.com/news/article-594873.由于此临时重定向可能会持续一段时间(特定文章可能是几个小时内的最新文章),因此浏览器可能会缓存重定向.要控制它们的工作程度,请使用缓存控制标头.
> 303是永远不能缓存的重定向.例如,将新文章发布到domain.com/news可能会创建一个新的新闻文章,并向domain.com/news/article-978523提供303重定向到它.由于另一个POST请求导致创建完全不同的新文章,因此无法对其进行高速缓存.
> 302有点陌生,我自己从未使用过它.显然它更像是303的遗留替代品,对于不了解303的早期HTTP 1.0版客户端.

既然你特意问过PHP:

<?php
function header_redirect_permanent($url)
    {
    header($_SERVER['SERVER_PROTOCOL'] . ' 301 Moved Permanently', true, 301);
    header('Location: ' . $url);
    }

function header_no_cache()
    {
    header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT'); // past date to encourage expiring immediately
    }

如果必须,您也可以使用上述缓存控制标头阻止代理缓存301:

header_no_cache();
header_redirect_permanent($url);

或者只是添加

header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header('Location:'.$url, true, 301);
exit;

标签:http-status-code-301,php,http,redirect
来源: https://codeday.me/bug/20191006/1858100.html