2015-10-06 77 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

即使将它们替换为下划线也是完美的 –