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

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

如果存在某个查询字符串,我可以让 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="(^|&amp;)download=1(&amp;|$)" />
        </conditions>
    </rule>
</outboundRules>

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

相关内容