根据论坛两位大佬指定,研究 nginx 与 apache 规则限制放盗链;
经测试发现自己虚拟主机 .htaccess 设置 Deny from all无效果,应该是被服务器全局设置覆盖了;
找到以下解决方法分享以一下:
演示链接:
授权后方可下载:https://www.ximi.me/down.php?url=test.zip
此链接拒绝未经授权网站挂载,转载链接自动失效;拒绝直接复制地址到任何第三方工具下载!
www.dalao.net 该域名已设置过授权,可以正常在该页面正常下载,复制地址无效滴!
未授权下载会根据自己设置跳转回原始地址或弹窗警示,例如下面这样!
下面附上代码:
<?php
$refer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$whitelist = ['ximi.me', 'www.ximi.me', 'dalao.net', 'www.dalao.net'];
$host = parse_url($refer, PHP_URL_HOST);
//echo $refer;
//echo $host;
if (!in_array($host, $whitelist)) {
// die('NO'); //
// 如果不在白名单中,执行退出操作
echo '<h2>访问被拒,拒绝盗版站点访问哦.</h2>';
echo '<h2><a href="https://www.ximi.me/666.html" target="_blank" alt="">原文地址</a></h2>';
exit; // 测试地址: http://www.ximi.me/down.php?url=test.zip
}
?>
<?php
// 假设通过GET参数传递文件名和验证信息
$fileName = $_GET['url'];
$filePath = "./a/b/d/" . $fileName; //这里是文件存放位置
//echo $fileName;// . $filePath;
// 用户验证逻辑(示例省略,实际使用时应添加)
if (file_exists($filePath)) {
// 设置HTTP头以准备文件下载
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename="' . basename($filePath) . '"');
//echo $refer . $filePath;
header('Content-Length: ' . filesize($filePath));
readfile($filePath);
exit;
}
else {
die('文件不存在');
exit;
}
?>