我在我的index.php頁面下面的代碼:修復重定向循環?
<?php include("/includes/widgets.php") ?>
在我widgets.php頁:
<?php
header("Location: /");
?>
我想實現與此是,如果將用戶重定向訪問它,但允許它包含。
,但我得到了以下錯誤:
The webpage has a redirect loop
如何我可以修復/防止重定向循環,但仍然將用戶重定向,而不是服務器。
我在我的index.php頁面下面的代碼:修復重定向循環?
<?php include("/includes/widgets.php") ?>
在我widgets.php頁:
<?php
header("Location: /");
?>
我想實現與此是,如果將用戶重定向訪問它,但允許它包含。
,但我得到了以下錯誤:
The webpage has a redirect loop
如何我可以修復/防止重定向循環,但仍然將用戶重定向,而不是服務器。
放置widgets.php文件放在HTTP客戶端無法訪問的文件夾中。我在apache的web服務器上,要麼把它放在你的文檔根目錄(進入它的父目錄),要麼使用.htaccess文件來阻止它的用戶。
例如
deny from all
我收回我的評論。做好他想做的事情! – andrewsi
一種可能的方法是向重定向添加參數,例如,
if (!$_REQUEST['redirect'])
header("Location: /ìndex.php?redirect=1");
這樣重定向只能發生一次。
另一種方法是如果用戶已經在/上,則停止重定向。我建議把兩者結合起來。
問題是,您正在重定向回到同一頁面,然後重新定向,再次,再次。
一個簡單的解決方法是將重定向包裝在if中,並且只有在它們不在索引頁上時才重定向;但這只是修補看起來像一個建築問題。
喜歡的東西:
if (ltrim($_SERVER['REQUEST_URI'], '/') != 'index.php')
header('Location: index.php');
的一種方法是檢查是否__FILE__
,這是加載的文件,無論包括或不包括與所要求的文件,該文件是在$_SERVER['REQUEST_URI']
(或$_SERVER['PHP_SELF']
)相匹配。
我在我們的開發網站上使用這個通常包含在輸出中作爲調試的頁面。
if(basename($_SERVER['PHP_SELF'])===basename(__FILE__)){
//do some debugging
}
通常,您不會使用基名,但是這是在非面向公衆的網站開發和文件有一個非常獨特的名字,所以我不擔心被包括在與另一文件的文件同名或其他
我想我知道你需要什麼:)
更改密碼索引文件到下一
define("IS_INDEX", true);
include("/includes/widgets.php"
更改代碼widgets.php下一
if (!defined("IS_INDEX")) {
header("Location: /");
exit();
}
我知道這是很多流行的PHP程序所做的。可能只是因爲它很容易。 –
[解決這個問題的唯一方法就是不要有重定向循環。](http:// stackoverflow。com/questions/20500919/fix-a-redirect-loop#comment30643944_20500919) – qwertynl
如果你在你的索引頁面中包含widgets.php,那麼這個頁面會不斷重新加載。您需要刪除include或「header()」調用。 – andrewsi
add'header('HTTP/1.1 301永久移動');' 我這樣說,如果你迫使人們回家過去的小部件頁面。 – ryan0319