如果存在某个查询字符串,我可以让 Apache 或 IIS 添加特定标头吗?
我希望查询字符串中带有“download=1”的每个 URL 都能够使用 来提供Content-Disposition: attachment
。
问题标题很奇怪,因为最初这仅与 Apache 有关,但现在我还添加了 IIS。
答案1
mod_rewrite
如下mod_headers
方法可以实现这一点:
RewriteEngine on
RewriteCond %{QUERY_STRING} (^|&)download=1(&|$)
RewriteRule ^(.*?([^/]*))$ $1 [E=DOWNLOAD:$2]
Header set "Content-Disposition" "attachment; filename=\"%{DOWNLOAD}e\"" env=DOWNLOAD
尚未对任何包含非 ASCII 或空格的内容进行测试。这些内容最终可能会显示在 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>
元素,则仅将规则放置在现有元素内)