2015-08-05 5 views
7

Dosyaları korumak için garip bir şekilde tökezledim. .htpwd şifre saklanır ve .htaccess:dosyaları kendi adlarına boşluklarla indir - htaccess ile kısıtlama

RewriteEngine On 
##RewriteBase/
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC] 
RewriteRule \.(.*)$ - [NC,F,L] 

RewriteCond %{QUERY_STRING} ^filename=(.*)$ 
RewriteRule ^download\.php$ %1 
RewriteRule (.*) - [E=file:$1] 
Header set Content-type "octet-stream" 
Header set Content-disposition "attachment; filename=%{file}e" env=file 

##AuthName "Restricted Access" 
##AuthType Basic 
##AuthUserFile /local/home/example/example.com/downloads/.htpwd 
##AuthGroupFile /dev/null 
##require valid-user 

Örnek (aynı klasörden) indirilecek korumalı klasörü ve dosya neden iki dosyalarını boş indir.php dosyası

Javascipt var indirme bağlantısı:
http://www.example.com/downloads/download.php?filename=dog%20cat%20cow.zip

Dosya adı dog-cat-cow.zip ise - tüm çalışır. Sorun, dosya adı: "köpek cat cow.zip" olduğunda başlar, daha sonra dosya indirilir ancak indirildikten sonra dosya adı "dog cat cow.zip" yerine "dog" olacaktır. Yani sorun insanlar bile uzatma olmadan dosya almak ve onunla ne yapacağına dair hiçbir fikrim yok.

Bu dosyaları çözüp sadece boşlukları kaldıramayacağımı düşünerek nasıl çözülebilir? Ben, htaccess'in nasıl okunacağı konusunda uzman değilim ve arama yapmak için aklınıza gelebilecek herhangi bir ifade, benzer bir sorun çözme sağlar. Herhangi bir fikrin var mı? yorumlarda belirtildiği gibi

+4

i bu 'Başlık set Content-eğilim böyle bir şey yapmak tavsiye "eki; dosya adı = '% {dosya} e'" env = Dosya ', tırnak – anonymous

+1

dosya adı @ Adsız söylediği gibi dosya beri boşluklar, teklif sınırlayıcılarına ihtiyacınız olacak. Ancak, bu ekstra ne için? – MrWhite

+0

"ancak indirildikten sonra dosya adı" - her zaman indirme yerini (tavsiye) için tarayıcıyı alabilirsiniz - bu aşamada kullanıcı dosya adını düzeltebilirsiniz. – MrWhite

cevap

1

, belki denemek:

RewriteEngine On 
##RewriteBase/
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?example.com [NC] 
RewriteRule \.(.*)$ - [NC,F,L] 

RewriteCond %{QUERY_STRING} ^filename=(.*)$ 
RewriteRule ^download\.php$ %1 
RewriteRule (.*) - [E=file:$1] 
Header set Content-type "octet-stream" 
Header set Content-disposition "attachment; filename='%{file}'" env=file 

##AuthName "Restricted Access" 
##AuthType Basic 
##AuthUserFile /local/home/example/example.com/downloads/.htpwd 
##AuthGroupFile /dev/null 
##require valid-user 

Alternatif olarak, neden download.php dosyanın kendi içindeki içerik türü ve Disposition ayarlanmamış?

$fileStorageDirectory = '/the/folder/the/downloadable/files/are/in/'; 

// Check for Parameter 
if(!isset($_GET['filename']) || $_GET['filename']==''){ 
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404); 
    die('No File Specified'); 
} 

$fileName = trim($_GET['filename']); 
$fileRequested = $fileStorageDirectory.$fileName; 
// Check File Exists 
if(!file_exists($fileRequested)){ 
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404); 
    die('File Not Found'); 
} 
// Check File is Readable 
if(!is_readable($fileRequested)){ 
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404); 
    die('File Not Accessible'); 
} 
// Send the File 
header('Content-Type: application/octet-stream'); 
header('Content-Disposition: attachment; filename="'.fileName.'"'); 
readfile($fileRequested); 
exit;