Назад | Перейти на главную страницу

Заставьте Apache или IIS добавить заголовок, если присутствует определенная строка запроса

Могу ли я заставить Apache или IIS добавить определенный заголовок, если присутствует определенная строка запроса?

Я хочу, чтобы каждый URL-адрес с "download = 1" в строке запроса обслуживался Content-Disposition: attachment.

Странный заголовок вопроса, потому что изначально речь шла только об Apache, но теперь я добавил и IIS.

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> элемент, поместите только правило внутри существующего элемента)