我不想让用户在网络浏览器中手动输入网址。 它可能会导致黑客攻击。 因此,如果http referer为空,它应该重定向到主页。
我在drupal web应用程序的index.php中编写了这个php代码。
if($_SERVER["HTTP_REFERER"] == "")
{
header("Location:http://mysite.com");
}
问题是循环无限延续。它从不显示主页。 $ _SERVER [“HTTP_REFERER”]始终为空。
在Firefox中,我收到以下错误。 页面未正确重定向 Firefox检测到服务器正在以永远无法完成的方式重定向此地址的请求。
如何解决?
答案 0 :(得分:2)
您发布的代码正在完成其工作。如果人们试图在没有引用者的情况下访问您网站的根目录,那么它将永远循环。
替换指向服务器header("Location:http://mysite.com");
上不同页面的header("Location:http://mysite.com/no_referer.php");
,当然,创建一个名为no_referer.php
的网页,其中包含一些内容,告诉他们。
由于代码会不断检查引用者是否来自您的网站,因此需要有三个不同的页面,它们如下所示:
一个用于索引,一个用于欢迎访问,一个用于错误的引用。
试试这个并给它一个条件。
(在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.php
和welcome.php
的其他页面,其中包含相应的内容。
答案 1 :(得分:0)
正确的检查应该是:
if (isset($_SERVER["HTTP_REFERER"]) && !empty($_SERVER["HTTP_REFERER"]))
{
... do something with referer
}
因为$ _SERVER [“ HTTP_REFERER”] ==“将在未设置引荐来源网址时出现错误。