重定向后$ _SERVER [“HTTP_REFERER”]为空

时间:2013-09-11 10:36:57

标签: php .htaccess drupal redirect

我不想让用户在网络浏览器中手动输入网址。 它可能会导致黑客攻击。 因此,如果http referer为空,它应该重定向到主页。

我在drupal web应用程序的index.php中编写了这个php代码。

if($_SERVER["HTTP_REFERER"] == "")
{
    header("Location:http://mysite.com"); 
}

问题是循环无限延续。它从不显示主页。 $ _SERVER [“HTTP_REFERER”]始终为空。

在Firefox中,我收到以下错误。 页面未正确重定向  Firefox检测到服务器正在以永远无法完成的方式重定向此地址的请求。

如何解决?

2 个答案:

答案 0 :(得分:2)

您发布的代码正在完成其工作。如果人们试图在没有引用者的情况下访问您网站的根目录,那么它将永远循环。

替换指向服务器header("Location:http://mysite.com");上不同页面的header("Location:http://mysite.com/no_referer.php");,当然,创建一个名为no_referer.php的网页,其中包含一些内容,告诉他们。

由于代码会不断检查引用者是否来自您的网站,因此需要有三个不同的页面,它们如下所示:

  1. index.php (假设您的索引文件被调用)
  2. 的welcome.php
  3. no_referer.php
  4. 一个用于索引,一个用于欢迎访问,一个用于错误的引用。

    试试这个并给它一个条件。

    (在index.php文件中)

    <?php
    if($_SERVER["HTTP_REFERER"] == "")
    {
        header("Location:http://mysite.com/no_referer.php");
    exit;
    }
    
    else {
        header("Location:http://mysite.com/welcome.php");
    exit;   
    }
    ?>
    

    要使用href进行测试,请使用以下内容并创建一个名为test_referer.php的网页,该网页将充当您的index.php文件。

    <a href="referer_test.php">Referer test</a>
    

    然后将上面的代码(the code that checks for a referer)复制到名为referer_test.php的文件中,并创建相应的名为no_referer.phpwelcome.php的其他页面,其中包含相应的内容。

答案 1 :(得分:0)

正确的检查应该是:

if (isset($_SERVER["HTTP_REFERER"]) && !empty($_SERVER["HTTP_REFERER"]))
{
   ... do something with referer
}

因为$ _SERVER [“ HTTP_REFERER”] ==“将在未设置引荐来源网址时出现错误。