簡體   English   中英

PHP標頭重定向無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM