如果存在某个查询字符串,则使 Apache 或 IIS 添加标头

Rom*_*nSt 5 iis apache-2.2

如果存在某个查询字符串,我可以让 Apache 或 IIS 添加一个特定的标头吗?

我希望查询字符串中带有“download=1”的每个 URL 都与Content-Disposition: attachment.

奇怪的问题标题,因为最初这只是关于 Apache,但现在我也添加了 IIS。

Rom*_*nSt 7

mod_rewritemod_headers使这成为可能,如下所示:

RewriteEngine on
RewriteCond %{QUERY_STRING} (^|&)download=1(&|$)
RewriteRule ^(.*?([^/]*))$ $1 [E=DOWNLOAD:$2]
Header set "Content-Disposition" "attachment; filename=\"%{DOWNLOAD}e\"" env=DOWNLOAD
Run Code Online (Sandbox Code Playgroud)

尚未使用任何包含非 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="(^|&amp;)download=1(&amp;|$)" />
        </conditions>
    </rule>
</outboundRules>
Run Code Online (Sandbox Code Playgroud)

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