一个mod_rewrite
解决方案将足够优雅,并且可以保持链接直接。
在您的.htaccess
中,重写所有.mp3
指向 PHP 脚本的链接:
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');
}
现在所有链接都保持直接,并且您将适当的标头返回给用户代理,提示下载或拒绝访问。