2013-12-10 147 views
0

我在我的index.php頁面下面的代碼:修復重定向循環?

<?php include("/includes/widgets.php") ?> 

在我widgets.php頁:

<?php 
    header("Location: /"); 
?> 

我想實現與此是,如果將用戶重定向訪問它,但允許它包含。

,但我得到了以下錯誤:

The webpage has a redirect loop

如何我可以修復/防止重定向循環,但仍然將用戶重定向,而不是服務器。

+12

[解決這個問題的唯一方法就是不要有重定向循環。](http:// stackoverflow。com/questions/20500919/fix-a-redirect-loop#comment30643944_20500919) – qwertynl

+1

如果你在你的索引頁面中包含widgets.php,那麼這個頁面會不斷重新加載。您需要刪除include或「header()」調用。 – andrewsi

+0

add'header('HTTP/1.1 301永久移動');' 我這樣說,如果你迫使人們回家過去的小部件頁面。 – ryan0319

回答

1

放置widgets.php文件放在HTTP客戶端無法訪問的文件夾中。我在apache的web服務器上,要麼把它放在你的文檔根目錄(進入它的父目錄),要麼使用.htaccess文件來阻止它的用戶。

例如

deny from all 
+0

我收回我的評論。做好他想做的事情! – andrewsi

-1

一種可能的方法是向重定向添加參數,例如,

if (!$_REQUEST['redirect']) 
    header("Location: /ìndex.php?redirect=1"); 

這樣重定向只能發生一次。

另一種方法是如果用戶已經在/上,則停止重定向。我建議把兩者結合起來。

0

問題是,您正在重定向回到同一頁面,然後重新定向,再次,再次。

一個簡單的解決方法是將重定向包裝在if中,並且只有在它們不在索引頁上時才重定向;但這只是修補看起來像一個建築問題。

喜歡的東西:

if (ltrim($_SERVER['REQUEST_URI'], '/') != 'index.php') 
    header('Location: index.php'); 
0

的一種方法是檢查是否__FILE__,這是加載的文件,無論包括或不包括與所要求的文件,該文件是在$_SERVER['REQUEST_URI'](或$_SERVER['PHP_SELF'])相匹配。

我在我們的開發網站上使用這個通常包含在輸出中作爲調試的頁面。

if(basename($_SERVER['PHP_SELF'])===basename(__FILE__)){ 
    //do some debugging 
} 

通常,您不會使用基名,但是這是在非面向公衆的網站開發和文件有一個非常獨特的名字,所以我不擔心被包括在與另一文件的文件同名或其他

1

我想我知道你需要什麼:)

更改密碼索引文件到下一

define("IS_INDEX", true); 
include("/includes/widgets.php" 

更改代碼widgets.php下一

if (!defined("IS_INDEX")) { 
    header("Location: /"); 
    exit(); 
} 
+0

我知道這是很多流行的PHP程序所做的。可能只是因爲它很容易。 –