如果某个查询string存在,我可以让Apache或IIS添加特定的头文件吗?
我希望查询string中每个带有“download = 1”的url都与Content-Disposition: attachment 。
奇怪的问题标题,因为最初这只是关于Apache,但现在我也添加了IIS。
使用mod_headers mod_rewrite使这成为可能,如下所示:
RewriteEngine on RewriteCond %{QUERY_STRING} (^|&)download=1(&|$) RewriteRule ^(.*?([^/]*))$ $1 [E=DOWNLOAD:$2] Header set "Content-Disposition" "attachment; filename=\"%{DOWNLOAD}e\"" env=DOWNLOAD
没有用非ASCII或空格的东西来testing。 这些可能最终会显示在URL转义的文件名,即“%20”等
编辑:特殊字符应该工作得很好。
我必须在IIS 7.5上做同样的事情,所以可以这样做:将下面的XML放到一个站点的<system.webServer><rewrite> ...部分:
<outboundRules> <rule name="DownloadAnything"> <match serverVariable="RESPONSE_Content_Disposition" pattern=".*" /> <action type="Rewrite" value="attachment" /> <conditions> <add input="{QUERY_STRING}" pattern="(^|&)download=1(&|$)" /> </conditions> </rule> </outboundRules>
(显然,如果你已经有一个<outboundRules>元素,只将规则放在现有的元素中)