2011-08-31 48 views
2

我一直在這裏尋找一段時間,找不到我的具體問題的答案。HTTP_REFERRER和位置重定向

在我網站上的100個地方中,我通過標題位置重定向重定向到錯誤頁面。

header("Location: /error.php"); 

我想要做的是在error.php頁面上捕獲並記錄http_referrer,但由於某種原因它沒有設置。我已經看到爲什麼沒有設置元刷新的解釋,但位置標題是302,所以它應該設置正確嗎?有什麼想法嗎?

請注意 - 我知道http_referrer是不可靠的,我知道我可以單獨傳遞信息。在我的場景中,這兩者都不重要(除非我想更改所有重定向所在的位置)。

+0

可能重複[將302重定向維護引用字符串?](http://stackoverflow.com/questions/2158283/will-a-302-redirect-maintain-the-referer-string) –

+2

一個問題是你不應該使用'Location:'頭部的相對路徑。 [RFC2616](http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.30)指出位置標題:'字段值由一個絕對URI組成。你必須使用新位置的絕對路徑。您可以從$ _SERVER ['HTTP_HOST']'和'$ _SERVER ['PHP_SELF']在這種情況下'header('http://'.$_SERVER ['HTTP_HOST']。'/ error.php')'; – DaveRandom

+0

@DaveRandom - 謝謝,它確實有效,雖然 – therealsix

回答

3

好了,HTTP_REFERER是由瀏覽器設置,如果瀏覽器選擇不把它放在一個302重定向,這是不應該,那麼你不會得到它。 302是臨時重定向,這意味着上一頁暫時不可用。爲什麼瀏覽器想要爲現在不存在的頁面發送信息?

好方法來實現這一目標:

  • 就個人而言,我有一個錯誤類來處理這種類型的東西,而不是直接從頁面只是重定向。這使您可以在重定向發生之前記錄所有需要的信息,甚至是調試信息。
  • 設置包含頁面信息的會話,並在錯誤頁面上抓取該信息進行記錄。
  • 您可以嘗試使用標頭設置Referer行,但有些瀏覽器會忽略此信息,因此無法發送。

真的沒有辦法解決這個問題,而不修改代碼在每個地方,它的重定向,你也想記錄信息。

+0

是否可以改變呼叫,以便它使用一些其他http代碼來發送http_referer?這仍然會有很多變化,但更簡單一些。 – therealsix

+0

你可以通過URL中的推薦人?無論哪種方式,這聽起來可能是全球搜索和替代? – MrWhite

2

它實際上是HTTP_REFERER(中間有一個'R') - 拼寫錯誤!

echo $_SERVER['HTTP_REFERER']; 
+0

Tks-只是在帖子中輸入錯誤,我在代碼中正確。 – therealsix

-1

某些瀏覽器不支持HTTP_REFERER。你可以使用isset()功能,這是非常重要的,你必須使用HTTP_REFERER而不是HTTP_REFERRER