我一直在反对这个问题一周。我有一个页面,我们只想从其他域访问。有可能使用PHP或.htaccess吗?我已经在这里发布了几次尝试这样做,似乎没有任何效果。请帮忙!
<?php
$allowed_domains = array('dirtybirddesignlab.com','foo.com');
$REFERRER = $_SERVER['HTTP_REFERER'];
if ($REFERRER == '') {
exit(header('Location: 404.php'));
}
$domain = substr($REFERRER, strpos($REFERRER, '://')+3);
$domain = substr($domain, 0, strpos($domain, '/'));
if (!in_array($domain, $allowed_domains)) {
exit(header('Location:404.php'));
}
?>
答案 0 :(得分:6)
要扩展我的评论,请参阅第if ($REFERRER == '')
栏。
<?php
$allowed_domains = array('mydomain.com','yourdomain.com');
$REFERRER = $_SERVER['HTTP_REFERER'];
if ($REFERRER == '') {
// What do you do here?
}
$domain = substr($REFERRER, strpos($REFERRER, '://')+3);
$domain = substr($domain, 0, strpos($domain, '/'));
if (!in_array($domain, $allowed_domains)) {
exit(header('Location: error.php'));
}
?>
注意,以上内容将始终引用那些未报告引荐来源的浏览器重定向到error.php页面。
我的建议是做一些像......
例如......
他们的域名
<?php
$dsalt = "AAAAB3NzaC1yc2EAAAABJQAAAIBNnuGAM6ZKURAS9h9ag".
"H85T1eIE+jlLkq7GhFny8wMJNpSM0stTDWeEYfL+4xWIE".
"lIF3NFvRpDAG/cgXuVmlBcO0ZxxKosrDv0dXCXNt5ciPJ".
"UjFi1e0FEJtkO32xrTDEB2IUg9rZ0tiqqsqnTCZBQ4AEvpMi";
$dkey = sha1($dsalt.date('mDY G'));
// ... Other stuff or whatnot, possible the above is also just an include file
// Then, they use it...
echo "<a href=\"http://yourdomain.com/download.php?key=$dkey\">Download stuff</a>";
?>
您的域名 - 包含('/ path / to / domaincheck.php')
<?php
$dkey = $_GET['key'];
$dsalt = "AAAAB3NzaC1yc2EAAAABJQAAAIBNnuGAM6ZKURAS9h9ag".
"H85T1eIE+jlLkq7GhFny8wMJNpSM0stTDWeEYfL+4xWIE".
"lIF3NFvRpDAG/cgXuVmlBcO0ZxxKosrDv0dXCXNt5ciPJ".
"UjFi1e0FEJtkO32xrTDEB2IUg9rZ0tiqqsqnTCZBQ4AEvpMi";
if (sha1($dsalt.date('mDY G')) != $dkey) {
exit(header('Location: error.php'));
}
?>
请注意$ dsalts是相同的。我用puttgen.exe生成了它。
这些方面的东西。您将需要处理密钥可能过期的情况,或诸如此类的东西。另一种方法可能是在具有时间戳的服务器之间共享有效的$ dkey,并在一定时间(可能是一小时)之后使它们到期。
theirserver.com和yourserver.com
<强>浏览器强>
答案 1 :(得分:2)
您可以使用以下内容:
<?php
$allowed = array("xxx.xxx.xxx.xxx", "xxx.xxx.xxx.xxx");
$ip = $REMOTE_ADDR;
if(!in_array($ip, $allowed))
{
header("Location: index.php");
exit;
}
?>
将xxx.xxx.xxx.xxx替换为网站的IP地址?
它将检查流量的IP地址,如果它不在数组中,则会将它们重定向到标题位置中定义的其他位置
根据检查引用者是否来自某个页面,试试这个:
<?php
$referer = $_SERVER['HTTP_REFERER'];
$referer_parse = parse_url($referer);
if($referer_parse['host'] == "mysite.com" || $referer_parse['host'] == "www.mysite.com") {
// download...
} else {
header("Location: http://www.mysite.com");
exit();
}
?>
答案 2 :(得分:1)
使用.htaccess尝试以下内容。
订单允许,否认
否认所有人
允许“域名允许不带www”
如果域名不起作用,请尝试
允许来自“IP地址”
在实际档案中排除“”。