使用htaccess和php实现mp3带宽调节

使用htaccess和php实现mp3带宽调节,php,.htaccess,bandwidth-throttling,Php,.htaccess,Bandwidth Throttling,我被机器人和恶意用户摧毁了,他们试图破坏我的网站 我试图制作一个带宽限制器,方法是mod_将所有mp3文件请求重写为一个php脚本,该脚本将跟踪每个ip,并限制每个ip每小时可以下载多少。这很好,但它给一些用户带来了很多问题,这些链接不是mp3文件的直接链接 我尝试了各种各样的强制下载头,但对某些用户有效的方法对其他用户无效 现在的问题是,是否有可能保持与mp3文件的直接链接,以及每当有人单击mp3文件时,同时运行允许或拒绝请求的跟踪php脚本 谢谢 (服务器没有mod_带宽或任何其他有用的mo

我被机器人和恶意用户摧毁了,他们试图破坏我的网站

我试图制作一个带宽限制器,方法是mod_将所有mp3文件请求重写为一个php脚本,该脚本将跟踪每个ip,并限制每个ip每小时可以下载多少。这很好,但它给一些用户带来了很多问题,这些链接不是mp3文件的直接链接

我尝试了各种各样的强制下载头,但对某些用户有效的方法对其他用户无效

现在的问题是,是否有可能保持与mp3文件的直接链接,以及每当有人单击mp3文件时,同时运行允许或拒绝请求的跟踪php脚本

谢谢


(服务器没有mod_带宽或任何其他有用的mod)

与其在用户单击链接时同时跟踪使用情况,不如将登录页设置为一个PHP脚本,用于检查用户的ip,并根据该脚本输出或隐藏链接? 如果您的文件存储在明显的文件夹中,例如。 yoursite/music/artist/song.mp3 您可以为它们创建软链接,这样会混淆路径。 在linux服务器上,您可以使用symlink()php函数创建指向/music目录的软链接,并将路径输出为yoursite/3awE2afeefef4a323/artist/song.mp3,该路径应仍然是指向该文件的直接链接,例如:

<?php
$target = 'music/';
$link = 'a322ewrr323211';
symlink($target, $link);
?>
<html>
<body>
     <a href="a322ewrr323211/artist/song.mp3">link</a>
</body>
</html>


然后每晚或在创建24小时后定期删除这些符号链接。

修改重写解决方案将足够优雅,可以保持链接的直接性

.htaccess
中,重写指向PHP脚本的所有
.mp3
链接:

RewriteEngine on
RewriteRule \.mp3$ download.php
在PHP文件中,我们可以提取请求的URI,验证用户的IP,并基于该验证返回相应的头

<?php

// Set variables
$requestedFile = trim($_SERVER['REQUEST_URI'], '/');
$ip = $_SERVER['REMOTE_ADDR'];
$protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';

// If the file does not exist, throw a 404 error
if (!file_exists($requestedFile)) {
    header($protocol . ' 404 Not Found');
}

// Is the user allowed to download?
function validateDownload($ip) {
    /**
     * Put your IP tracking and validation code here, returning `TRUE`
     * or `FALSE`.
     */

    return TRUE;
}

// Validate and perform appropriate action
$canDownload = validateDownload($ip);

if ($canDownload) {
    header('Content-Disposition: attachment; filename="' . basename($requestedFile) . '"');
    header('Content-type: audio/mpeg');
    readfile($requestedFile);
} else {
    header($protocol . ' 403 Forbidden');
}

托管一个torrent跟踪器,然后torrent他们=o)免费带宽!只是开玩笑,停止机器人设置验证码,并在成功时提供带有散列ID的链接,然后提供MP3。至于恶意用户,他们在做什么?验证码也会让他们慢下来,但需要更多的信息。但你们怎么供应mp3呢。唯一让每个人都高兴的是直接链接。如果我使用readfile服务器,我会收到无法下载的人的投诉。尝试了所有类型的http头,但没有雪茄。可以为mp3文件设置专用子域吗?如果是这样,那么您可以通过
Host
头来处理此请求,方法与所有其他请求不同。具体来说,您可以将现有的节流php脚本作为index.php放在该子域中,这样链接将保持“直接”,但节流将被透明地启用。thnx听起来很复杂。你知道有一个网页谈论这个吗?@user1909257你能详细说明一下你尝试过的标题组合吗?如果标题设置正确,任何合理的UA都没有理由对此设置有问题。谢谢,但是标题和readfile对某些人不起作用。这就是我想保持直接的原因links@user1909257如果这种技术对某些用户不起作用,那么他们很可能不是使用浏览器下载文件,而是使用某种形式的下载管理器。PHP头可能有点问题,尤其是在旧版本的IE(6和7)中,但是添加一些额外的头(这里详细介绍了#3:)通常可以解决这个问题。所有其他浏览器在正确发送时都可以理解这些标题,如我的示例中所示。