2013-12-10 201 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程序所做的。可能只是因为它很容易。 –