【问题标题】:Process data BEFORE a 301 Redirect?在 301 重定向之前处理数据?
【发布时间】:2011-02-26 15:24:43
【问题描述】:

所以,我一直在研究 PHP 链接缩短器(我知道,这正是世界所需要的)。基本上当页面加载时,php 确定它需要去哪里并发送一个 301 Header 来重定向浏览器,就像这样......

Header( "HTTP/1.1 301 Moved Permanently" );
header("Location: http://newsite.com";

现在,我正在尝试向重定向添加一些跟踪,并在重定向发生之前将一些自定义分析数据插入 MySQL 表。如果我不指定重定向类型而只使用:

header("Location: http://newsite.com";

但是,当然,只要您添加 301 标头,就不会处理其他任何内容。实际上,在第一次请求时,它会将数据发送到 MySQL,但在任何后续请求中,都不会与数据库通信。

我认为这是浏览器缓存问题,一旦看到 301,它就决定他们没有理由解析未来请求的任何内容。但是,有没有人知道有没有办法解决这个问题?

出于 SEO 的目的,我真的很想将其保留为 301(我相信如果您不指定它会默认发送 404?)。

我曾考虑使用 .htaccess 将文件添加到将执行 MySQL 工作的页面,但是使用 301,这不会也被忽略吗?

无论如何,除了使用不同类型的重定向之外,我不确定是否有任何解决方案,但我已经准备好放弃了。因此,任何建议将不胜感激。谢谢!

【问题讨论】:

    标签: php mysql redirect http-status-code-301


    【解决方案1】:

    尝试在第一个标题语句之前添加以下内容;这应该可以防止在典型页面中缓存,但我不确定它是否适用于重定向:

    header("Cache-Control: no-cache, must-revalidate");
    header("Expires: Thu, 1 Jan 1970 00:00:00 GMT");
    

    【讨论】:

    • RFC 2616 说“除非另有说明,否则此响应是可缓存的”,因此它可能会起作用。
    【解决方案2】:

    解释在 301 代码的描述中:“Moved Permanently”你明确告诉浏览器新页面是一个永久的新位置,因此没有理由让它永远不要再次访问旧网址。

    改为使用 303 See Other 状态。这具有大致相同的含义(因为它将访问者重定向到其他地方),但它“不能”被缓存。

    【讨论】:

      【解决方案3】:

      你应该使用默认的302重定向,这是一个临时重定向,不会被缓存。

      301 是永久重定向,大多数浏览器都会缓存它。

      【讨论】:

        猜你喜欢
        • 2019-08-10
        • 2012-03-14
        • 1970-01-01
        • 2011-07-25
        • 2022-01-25
        • 2015-05-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多