2011-05-03 28 views
6

這是一個很奇怪的問題。在我的代碼中,我有一個完全在我的本地服務器上工作的重定向。標題不重新定向(並且沒有任何錯誤)

header("location:/sign-up-success"); 

當我推到生產時,它只是不重定向。有沒有我失蹤的設置?

我甚至試過:

header("Location: https://www.myurl.com/sign-up-success"); 

這似乎只是跳過重定向。有任何想法嗎?

+7

檢查您的錯誤日誌中是否有任何PHP警告/錯誤?您的生產服務器可能不會直接向瀏覽器報告它們。 – Amber 2011-05-03 00:45:05

+5

重定向後,頭部重定向應該「退出」,因此「它應該[不]跳過重定向」,而只是死掉(如果正確的話)。另外,您可能在本地服務器上啓用了「output_buffering」,但未在生產環境中。嘗試在本地機器上關閉它(以及啓用@Amber建議的錯誤)。 – netcoder 2011-05-03 01:01:21

+0

@Amber - 錯誤日誌中沒有任何錯誤。這是奇怪的事情。 – Jason 2011-05-03 01:23:42

回答

0

謝謝所有回覆。看起來這個問題的答案是由@netcoder在評論中給出的。答案如下:

在本地機器上的php.ini文件中,我有「output_buffering = 4096」,並在生產服務器上將其設置爲「output_buffering = off」。把它解決頭問題和其他一些問題。

對於那些有其他標題問題的人,請查看其他回覆,因爲如果您關閉了錯誤報告,這些回覆將會很有幫助。 (之前我遇到過這種情況,這就是爲什麼我知道這不是問題,但對於重定向工作人員而言,這肯定會讓人頭痛,並且不知道問題出在哪裏)。

謝謝大家。

0

它似乎只是跳過重定向。

您需要仔細查看腳本在標頭/內容中返回的內容。有很多可用的工具 - HTTP提琴手,即MSIE的httpheaders,Firefox的有tamperdata,liveheaders,web開發工具欄等等。或嗅探網絡流量(雖然解碼SSL可以是PITA)

2

可能的原因:您發送一些輸出到瀏覽器的header()
解決呼叫前:在頁面的頂部ob_start()

最佳實踐:alwyas寫exit()header() ..

Reference

+0

添加'ob_start()'是解決方法,而不是解決方法。解決辦法是消除任何輸出。 – binaryLV 2011-05-03 11:06:48

2

查看生產服務器上的值error_reporting。如果它設置得太低,則日誌中將不會有任何內容,因爲低於error_reporting的錯誤只會被默默忽略。同樣適用於使用@ - 它將error_reporting設置爲0,因此如果發生任何不良情況(例如,如果函數甚至沒有定義),您將不會在日誌中看到任何內容。

從你寫的關於啓用輸出緩衝的看來,你在header()之前有一些輸出(這就是爲什麼啓用輸出緩衝有所幫助),並且你的error_reporting設置爲0(這就是爲什麼警告「不能修改標題信息「沒有被報告/記錄)。


在一個側面說明...爲了得到最錯誤報告:

  • 設置error_reportingE_ALL | E_STRICT(在開發環境和生產環境)
  • 啓用錯誤記錄(對於生產關鍵環境,儘管在開發環境中也不會傷害它)
  • 設置display_errortrue在開發環境中,false在生產環境(cr itical!用戶不必看到任何PHP警告/通知/錯誤)
  • 另外,您可能想要set_error_handler()輸出或記錄比默認錯誤處理程序更多的信息(例如,,當發生錯誤時,您可能需要存儲debug_backtrace()
相關問題