[英]PHP header redirect not working
我知道這已被覆蓋過,但我找不到答案,
我一直用這個;
header("Location: http://www.website.com/");
exit();
這一直在我當前的項目中工作,突然間它在我的任何瀏覽器中都無法運行
我想找出問題並修復它而不是使用它
echo "<script type='text/javascript'>window.top.location='http://website.com/';</script>";
我也啟用了錯誤報告,但沒有顯示任何錯誤
// SET ERROR REPORTING
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE);
ini_set('display_errors', TRUE);
任何想法為什么它不起作用?
嘗試:
error_reporting(E_ALL | E_WARNING | E_NOTICE);
ini_set('display_errors', TRUE);
flush();
header("Location: http://www.website.com/");
die('should have redirected by now');
看看你得到了什么。 你不應該在你的error_reporting()調用中使用^(xor),因為你無意中要求所有錯誤除了通知和警告..這就是“已經發送的頭文件”錯誤。
編輯:
還可以嘗試將flush()放在header()調用的正上方。
嘗試刪除位置之間的空格和http中的第一個h。
header("Location: http://www.website.com/");
exit();
變成
header("Location:http://www.website.com/");
exit();
我在WAMP服務器上遇到了這個問題。
雖然它應該不是問題,但考慮到它是如何在PHP文檔中記錄的。 但無論如何你應該嘗試一下。 我知道在很多情況下它對我有用。
1)在header(.......);
之前不應該有任何輸出(即echo..
或HTML代碼header(.......);
命令。
2)在<?php
和after ?>
標簽之前不應該有空格 (或換行符 )。
3) 金色規則! - 文件(和其他include()
d文件)應該沒有BOM編碼的UTF8 (而不僅僅是UTF-8 )。 這在許多情況下都是問題(因為典型的UTF8編碼文件在文件輸出的開頭有一些特殊的字符)!!!!!!!!!!!
4) 重定向后,在header(...);
你必須使用exit;
5)推薦做法 - 在參考中始終使用301或302:
header("location: http://example.com", true, 301 ); exit;
6)如果以上都沒有幫助,請使用JAVSCRIPT重定向(但谷歌強烈建議不要這樣做),但這可能是最后的機會...:
echo "<script type='text/javascript'>window.top.location='http://example.com/';</script>"; exit;
試試這個。 為我工作。
echo "<meta http-equiv='refresh' content='0;url=http://www.yoursite.com'>";
這可能是奇怪的解決方案,但嘗試這一點,將頁面編碼從utf8更改為ANSI,它將工作。
使用任何文本編輯器並將頁面保存為ANSI編碼並將其上載到您的在線服務器。
此外,當您使用頭功能時,它必須是在將任何文本(甚至是空格)寫入客戶端之前調用的第一件事,因此再次檢查在您的呼叫之前甚至在此之前沒有輸出空格
<?php
添加ob_start()解決了這個問題。
訪問該頁面時會發生什么? 您可以嘗試使用Firebug或任何其他工具來分析HTTP標頭並檢查重定向是否真的發生以及Location
標頭是否真的存在。
您還應驗證是否重定向到有效位置,並且該位置具有正確的404和500錯誤消息/頁面設置。 可能是你只是重定向一個不好的地方。
很奇怪,但刪除php中的空白行為我工作: - \\
代碼之前:
<?php
header("Location: http://www.website.com/");
?>
有效的代碼:
<?php header("Location: http://www.website.com/"); ?>
試試這個(為我工作):
echo '<script>window.location.replace("http://www.example.com")</script>';
代替
header("Location: http://www.example.com");
如果您的索引頁面是一個html文件,它可能無法正常工作。 將其更改為index.php並使用以下代碼:
<?php
header("Location: http://ea.tc");
?>
我實際上有一個類似的情況,我有一個管理頁面,包含在我所有其他頁面的頂部。 在該行下方的每個頁面的頂部:
<?php include '../../admin.php' ?>
我會有php邏輯:
<?php if($_SESSION['username'] === null){ header("Location: ./adminLogin.php");}?>
這個問題是在其他地方,我也在調用/操縱header(...
經過很長時間我的代碼后,我承認我無法弄清問題在哪里。然后我認為這些文件中的每一個在做任何其他事情之前點擊我的admin.php
文件。所以我想如果我把邏輯置於我的每個視圖的頂部會發生什么(因為除非你登錄,否則我不希望任何東西可見)進入我的admin.php
文件?
發生了什么事情之前,它甚至在我的視圖中得到任何一個php / html它評估了是否有人登錄( $_SESSION['username'])
)如果它是NULL
然后我只是重定向到adminLogin頁面。 我把這個邏輯放在我的開關之前,它對我曾經需要邏輯的所有文件都很有效。 我的方式在開發中起作用,但在生產中提出了很多問題。 我發現將重定向邏輯移動到我的admin.php
文件不僅避免了重復的header(...
操作,但實際上通過從我的視圖文件中刪除多余的邏輯並進入我的admin.php
文件使我的代碼更有效。
而不是將邏輯放在每個視圖文件中,在切換之前將其放入控制器中一次。 奇跡般有效! 如果您不希望任何人訪問任何敏感視圖,除非他們登錄,這非常有用。在我的情況下,這對我的CMS很重要。 但是,如果有一些文件要在不登錄的情況下可以查看,那么我認為原始邏輯就足夠了。 您似乎已經找到了解決方案,但希望如果您再次遇到此錯誤,這可能會有所幫助。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.