這是一個很奇怪的問題。在我的代碼中,我有一個完全在我的本地服務器上工作的重定向。標題不重新定向(並且沒有任何錯誤)
header("location:/sign-up-success");
當我推到生產時,它只是不重定向。有沒有我失蹤的設置?
我甚至試過:
header("Location: https://www.myurl.com/sign-up-success");
這似乎只是跳過重定向。有任何想法嗎?
這是一個很奇怪的問題。在我的代碼中,我有一個完全在我的本地服務器上工作的重定向。標題不重新定向(並且沒有任何錯誤)
header("location:/sign-up-success");
當我推到生產時,它只是不重定向。有沒有我失蹤的設置?
我甚至試過:
header("Location: https://www.myurl.com/sign-up-success");
這似乎只是跳過重定向。有任何想法嗎?
謝謝所有回覆。看起來這個問題的答案是由@netcoder在評論中給出的。答案如下:
在本地機器上的php.ini文件中,我有「output_buffering = 4096」,並在生產服務器上將其設置爲「output_buffering = off」。把它解決頭問題和其他一些問題。
對於那些有其他標題問題的人,請查看其他回覆,因爲如果您關閉了錯誤報告,這些回覆將會很有幫助。 (之前我遇到過這種情況,這就是爲什麼我知道這不是問題,但對於重定向工作人員而言,這肯定會讓人頭痛,並且不知道問題出在哪裏)。
謝謝大家。
它似乎只是跳過重定向。
您需要仔細查看腳本在標頭/內容中返回的內容。有很多可用的工具 - HTTP提琴手,即MSIE的httpheaders,Firefox的有tamperdata,liveheaders,web開發工具欄等等。或嗅探網絡流量(雖然解碼SSL可以是PITA)
查看生產服務器上的值error_reporting
。如果它設置得太低,則日誌中將不會有任何內容,因爲低於error_reporting
的錯誤只會被默默忽略。同樣適用於使用@
- 它將error_reporting
設置爲0,因此如果發生任何不良情況(例如,如果函數甚至沒有定義),您將不會在日誌中看到任何內容。
從你寫的關於啓用輸出緩衝的看來,你在header()
之前有一些輸出(這就是爲什麼啓用輸出緩衝有所幫助),並且你的error_reporting
設置爲0(這就是爲什麼警告「不能修改標題信息「沒有被報告/記錄)。
在一個側面說明...爲了得到最錯誤報告:
error_reporting
到E_ALL | E_STRICT
(在開發環境和生產環境)display_error
到true
在開發環境中,false
在生產環境(cr itical!用戶不必看到任何PHP警告/通知/錯誤)set_error_handler()
輸出或記錄比默認錯誤處理程序更多的信息(例如,,當發生錯誤時,您可能需要存儲debug_backtrace()
)
檢查您的錯誤日誌中是否有任何PHP警告/錯誤?您的生產服務器可能不會直接向瀏覽器報告它們。 – Amber 2011-05-03 00:45:05
重定向後,頭部重定向應該「退出」,因此「它應該[不]跳過重定向」,而只是死掉(如果正確的話)。另外,您可能在本地服務器上啓用了「output_buffering」,但未在生產環境中。嘗試在本地機器上關閉它(以及啓用@Amber建議的錯誤)。 – netcoder 2011-05-03 01:01:21
@Amber - 錯誤日誌中沒有任何錯誤。這是奇怪的事情。 – Jason 2011-05-03 01:23:42