htaccess de gelen requestleri index.php?file={X} karşılayacak şekilde planlarsınız. index.php'de de gelen referrer isteğinden domain kontrolü yapıp file ı açtırabilirsiniz.
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request=$1 [L,QSA]<?php
// Referrer kontrolü
$referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$allowed_referrer = 'deneme.com';
// İsteği al
$request = isset($_GET['request']) ? $_GET['request'] : '';
if (strpos($referrer, $allowed_referrer) !== false) {
// Eğer referrer deneme.com ise dosyayı aç
$file_path = __DIR__ . '/' . $request;
if (file_exists($file_path)) {
// Dosyanın uzantısını al
$file_extension = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
// Content-Type başlıkları, dosya uzantısına göre ayarlanıyor
switch ($file_extension) {
case 'jpg':
case 'jpeg':
header('Content-Type: image/jpeg');
break;
case 'png':
header('Content-Type: image/png');
break;
case 'gif':
header('Content-Type: image/gif');
break;
case 'pdf':
header('Content-Type: application/pdf');
break;
case 'txt':
header('Content-Type: text/plain');
break;
case 'html':
header('Content-Type: text/html');
break;
default:
header('Content-Type: application/octet-stream'); // Bilinmeyen dosyalar için varsayılan
header('Content-Disposition: attachment; filename="' . basename($file_path) . '"');
break;
}
// Dosyanın boyutunu ve indirme hızını ayarlamak için içerik boyutu
header('Content-Length: ' . filesize($file_path));
// Dosya içeriğini okutup tarayıcıya gönderiyoruz
readfile($file_path);
exit;
} else {
// Dosya yoksa hata mesajı göster
echo "İstenen dosya bulunamadı.";
}
} else {
// Referrer kontrolü başarısız
echo "Yetkisiz istek. Sadece deneme.com üzerinden erişim izni var.";
}
?>