如果某个查询string存在,使Apache或IIS添加一个标题

如果某个查询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="(^|&amp;)download=1(&amp;|$)" /> </conditions> </rule> </outboundRules> 

(显然,如果你已经有一个<outboundRules>元素,只将规则放在现有的元素中)