2010-06-02 50 views
0

所以,我一直在研究PHP链接缩写(我知道,只是世界需要什么)。基本上,在页面加载时,PHP决定了它需要去并发送301头将浏览器重定向,像这样......在301重定向之前处理数据?

现在,我尝试了一些跟踪添加到我的重定向和插入在重定向发生之前将一些自定义分析数据导入到MySQL表中。它完美的作品,如果我不指定重定向类型,只需使用:

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

但是,当然只要你在301头添加,其他什么都得到处理。实际上,在第一次请求时,它将数据发送到MySQL,但在随后的任何请求中都没有与数据库进行通信。

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

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

我曾考虑过使用.htaccess将一个文件预先放置到将执行MySQL工作的页面上,但是使用301,是否也不会被忽略?

无论如何,我不知道是否有任何解决方案,而不是使用不同类型的重定向,但我已经准备好放弃了。所以,任何建议将不胜感激。谢谢!

回答

2

尝试在第一个头语句之前添加以下内容;这应该防止常见的网页缓存,但我不知道它是否适合重定向:

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

RFC 2616说“这个响应是可缓存的,除非另有说明”,所以它可能会工作。 – Artefacto 2010-06-02 03:38:49

+0

完美的感谢! – Jesse 2010-06-02 04:21:56

0

的解释是在301码的描述:“感动永久”你具体说的是浏览器认为新页面是永久性的新位置,因此没有理由再次访问旧URL。

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

0

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

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