2010-06-02 49 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是永久重定向,大多數瀏覽器將緩存它。