Php 在301重定向之前处理数据?

Php 在301重定向之前处理数据?,php,mysql,redirect,http-status-code-301,Php,Mysql,Redirect,Http Status Code 301,所以,我一直在开发一个PHP链接缩短器(我知道,这正是世界所需要的)。基本上,当页面加载时,php确定它需要去哪里,并发送一个301头来重定向浏览器,就像这样 Header( "HTTP/1.1 301 Moved Permanently" ); header("Location: http://newsite.com"; 现在,我试图在重定向发生之前,向重定向添加一些跟踪,并将一些自定义分析数据插入MySQL表。如果我不指定重定向类型,只使用: header("Location: http:

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

Header( "HTTP/1.1 301 Moved Permanently" );
header("Location: http://newsite.com";
现在,我试图在重定向发生之前,向重定向添加一些跟踪,并将一些自定义分析数据插入MySQL表。如果我不指定重定向类型,只使用:

header("Location: http://newsite.com";
但是,当然,只要添加301头,就不会处理任何其他内容。实际上,在第一个请求中,它会将数据发送到MySQL,但在任何后续请求中,都不会与数据库通信

我假设这是一个浏览器缓存问题,一旦它看到301,它就会决定它们没有理由在将来的请求中解析任何内容。但是,有人知道有没有什么办法可以解决这个问题吗

我真的很想保留它作为一个301搜索引擎优化的目的(我相信如果你不指定它发送一个404默认?)

我曾考虑过使用.htaccess将一个文件预先添加到页面,以完成MySQL的工作,但使用301,这难道不会被忽略吗


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

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

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

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


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

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

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

RFC2616说“除非另有说明,否则此响应是可缓存的”,因此它可能会工作。