2015-10-06 116 views
3

我無法弄清楚如何使用正確命名下載的空格的文件名。名字在第一個空格處被打破。例如。文件htaccess打破文件名與空間

how are you.pdf 

下載爲

how 

下面是我的代碼。我嘗試了很多東西,但都沒有做到這一點。

RewriteEngine On 
##RewriteBase/
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?consciousnesscoachingacademy.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 
+0

有趣的問題。我甚至不確定是否有關於如何在「Content-disposition」和類似的HTTP標頭中編碼文件名的真實規範,所以我不知道mod_headers是否有正確的工具。 –

+0

文件名應該用雙引號括起來,[按照規範](http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html#sec19.5.1)。 '內容 - 處置:附件; filename =「how you.pdf」'。這將解決您的文件被下載爲「如何」的問題。 – Bjorn

回答

1

試試這個代碼:

RewriteEngine On 

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

# file download (attachment) 
RewriteCond %{THE_REQUEST} /download\.php\?filename=(.+)\ HTTP/ [NC] 
RewriteRule ^download\.php$ %1? [E=file:%1] 

Header set "Content-disposition" "attachment; filename=\"%{REDIRECT_file}e\"" 
Header set "Content-type" "octet-stream" 
+0

它確實使文件可以使用正確的擴展名下載,但是:它會用%20替換空格。任何方式來解決這個問題呢? –

+0

否此規則不會將空間轉換爲'%20',它會在您的瀏覽器中進行轉換。 – anubhava

+0

即使將它們替換爲下劃線也是完美的 –