A 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');
}
現在所有鏈接保持直接,並且您將相應的標題返回給用戶代理,提示下載或拒絕訪問。
主持一個洪流跟蹤器和洪流它們= o)免費帶寬然後!只是在開玩笑,阻止機器人設置驗證碼,並在成功時提供哈希ID鏈接,然後爲MP3提供服務。至於惡意用戶,他們在做什麼?驗證碼也應該放慢速度,但需要更多信息。 –
thnx。但你如何提供mp3的。唯一讓大家開心的是直接鏈接。如果我使用readfile的服務器,我收到了無法下載的人的投訴。嘗試了各種各樣的http頭,但沒有雪茄。 – user1909257
可以使用爲mp3文件設置專門的子域名嗎?如果是這樣,那麼你可以通過'Host'頭來處理這個問題,然後所有其他的請求都會不同。具體而言,您可以將現有的限制性php腳本作爲index.php放置在該子域中,因此鏈接將保持「直接」,但限制將透明地啓用。 – Stan