gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 22:54:35 24 4
gpt4 key购买 nike

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

最佳答案

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

See here用于适当的用例。

详细说明这三者的区别:

  • 307 是移动资源时的通用临时重定向。例如,像 domain.com/news/latest 这样的 URL 可能会执行 307 重定向到最新的新闻文章 domain.com/news/article-594873。由于此临时重定向可能 会持续一段时间(该特定文章可能是几个小时内的最新文章),浏览器可能 会缓存该重定向。要控制它们执行的程度,请使用缓存控制 header 。
  • 303 是永远绝不能缓存的重定向。例如,将一篇新文章发布到 domain.com/news 可能会创建一篇新的新闻文章,并向它提供一个 303 重定向到 domain.com/news/article-978523。由于 另一个 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 ,如下所示:

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;

关于php - 如何进行非缓存 301 重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12192590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com