Могу ли я заставить 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="(^|&)download=1(&|$)" />
</conditions>
</rule>
</outboundRules>
(очевидно, если у вас уже есть <outboundRules>
элемент, поместите только правило внутри существующего элемента)