我保护页面不被访问,只能通过引荐页面访问它,这是我在登录页面上的代码
<?php
// request file coming from test referrer
if(stristr($_SERVER['HTTP_REFERER'],"http://aqsv.com/sites2/testreffer/tp1.php"))
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>
<body>
<h1>Test Landing Page 1</h1>
</body>
</html>
<?php
}
// redirect to redirect.php
else {
header("Location: http://aqsv.com/sites2/testlander/redirect.php");
}
?>
这是推荐人页面
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test Refererrer 1</title>
</head>
<body>
<h1>Test Refererrer 2</h1>
<a href="http://aqsv.com/sites2/testlander/lp1.php">Link me to landing page1</a>
</body>
</html>
这项工作完全在单个引用页面上,我想要做的是有多个引用页面来访问页面,我是新来的PHP,真的没有任何想法这样做..我尝试添加http引用使用if其他像这样
<?php
// request file coming from test referrer
if(stristr($_SERVER['HTTP_REFERER'],"http://aqsv.com/sites2/testreffer/tp1.php"));
elseif(stristr($_SERVER['HTTP_REFERER'],"http://aqsv.com/sites2/testreffer/tp2.php"))
{
?>
但第二个链接不起作用。任何帮助将受到高度赞赏。谢谢
答案 0 :(得分:0)
您可以使用包含所有有效引荐来源网址的数组。 E.g。
<?php
$valid_domains = array(
'domain1',
'domain2',
'domain3'
);
// The checking for valid domain
if ( in_array($_SERVER['HTTP_REFERER'], $valid_domains) )
{
?>
Your HTML goes here....
<?php
}
?>
请参阅http://php.net/manual/en/function.in-array.php
希望这个想法会对你有所帮助。
答案 1 :(得分:0)
if/elseif...
的语法是:
if (something) {
body
} elseif (somethingelse) {
body
}
但是body
没有if
,只有elseif
,所以在这种情况下没有任何事情发生。
由于您希望所有测试使用相同的正文,因此您应该只使用一个if
,其中多个条件由OR
连接:
if (stristr($_SERVER['HTTP_REFERER'],"http://aqsv.com/sites2/testreffer/tp1.php") ||
stristr($_SERVER['HTTP_REFERER'],"http://aqsv.com/sites2/testreffer/tp2.php")) {
...
}
另一种方法是将所有允许的引用放在一个数组中,然后执行:
if (in_array(strtolower($_SERVER['HTTP_REFERER']), $allowed_referers)) {
...
}
我使用strtolower()
使其不区分大小写,就像您原来的测试一样。