301重定向之前的流程数据?

时间:2010-06-02 03:27:20

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

所以,我一直在研究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用于SEO目的(我相信如果你没有指定它默认发送一个404?)。

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

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

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

解释在301代码的说明中:“移动永久”您特别告诉浏览器新页面是一个永久的新位置,因此没有理由再次访问旧网址。

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

答案 2 :(得分:0)

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

301是永久重定向,大多数浏览器都会对其进行缓存。