Eğer bir dosya örneğin resim, sitede görünüyorsa public olarak da erişilebilir demektir. Yani sen dosyaya erişimi engellersen sitede de görünmez. Engellemezsen bu sefer de doğrudan da erişilebilir. Yani hem şoför mahali hem de cam kenarı olmaz.
Örneğin bir fotoğrafın sitede görünmesini istiyorsun ama birisi o fotoğrafın adresini alıp tarayıcıya yapıştırdığında şak diye karşısına çıkmasını istemiyorsan bunun başka çözümü var. Doğrudan htaccess ile değil de yazılımla halledebilirsin. Biraz uğraştırır ama kesin sonuç verir.
Şöyle yapacaksın. Örnek veriyorum bir blog sitesi ve bir gönderi var, bu gönderinin de bir resmi var, bu resimin linkini dinamik olarak oluşturacaksın.
sallıyorum "/assets/images/blog_5.jpg"
bu şekilde değil de "/assets/images/439utru9sdf9u434/blog_5.jpg"
yapacaksın. Bu aradaki private key i sayfa hemen yüklenmeden önce oluşturup veritabanına kaydedeceksin, sayfa yüklendikten sonra da bu linki oluşturmak için veritabanından tekrar çekeceksin. Çektikten sonra kullanıldı durumunu 0 dan 1 e getireceksin. Bir dahaki sayfa yüklenmesinde yeni bir key ile bu link oluşacak.
Daha sonra bu keyin geçerli olup olmadığını kontrol ederek fotoğrafı ekrana basacaksın yada basmayacaksın. Link tek kullanımlık olduğu için bu kişi adresi kopyalasa da public erişim sağlayamayacak.
Biraz karmaşık gibi duruyor ama ben çok sık kullanıyorum. Veritabanı olarak mysql kullanman pek sağlıklı olmaz, sqlite gibi hafif bir yapı kullanman zaman ve performans açısından sana avantaj sağlar. Veritabanı yerine session da kullanabilirsin. Ama kurguyu güzel yapmazsan ve bir private key kullanıldıktan sonra yok olmazsa ram da gereksiz yer kaplamaya başlar, ziyaretçi sayısı artınca da site gümler.
Bunun için en genel geçer kural budur, tek kullanımlık indirme linkleri böyle oluşturulur. Sözün özü, biryerde görünüyorsa public de erişilebilir, linki tek kullanımlık yaparak gerçek yolu saklamak doğru yoldur.
Bol şans.