在Apache .htaccess
中,我有以下块强制下载。
<If "%{QUERY_STRING} =~ /fileName=/">
ForceType application/octet-stream
Header set "Content-disposition" "attachment; filename=download.doc"
</If>
这个很好用。现在我需要使文件名成为查询字符串键“fileName”的值。
我知道如何在Nginx里做这个。下面是代码。
if ($arg_fileName) {
set $fname $arg_fileName;
add_header Content-Disposition 'attachment; filename="$fname"';
}
如何在Apache .htaccess
中执行此操作?
1条答案
按热度按时间zour9fqk1#
你可以在mod_rewrite的帮助下做这样的事情:
([^&]+)
-但是,请注意,您可能希望限制用于匹配fileName
参数 value 的正则表达式,因为HTTP响应头的 filename 参数中不一定允许所有内容。这可以vary by browser and modern browsers do support more。还要注意,从QUERY_STRING
中抓取的值已经是URL编码的。所以,也许像([\w.-]+)
这样的东西就足以匹配a-z
、A-Z
、0-9
、_
、.
和-
了?env=FILENAME
参数导致只有当FILENAME env变量存在时才设置header,因此不需要<If>
表达式。这并不是触发 download 的严格必要条件,在任何现代浏览器中,
Content-Disposition: attachment
头文件都可以触发 * download*。实际上,并不一定推荐为所有响应发送application/octet-stream
MIME类型。您应该为正在发送的资源发送正确的Content-Type
标头。