Faça o Apache ou o IIS adicionar um cabeçalho se uma determinada cadeia de consulta estiver presente

5

Posso fazer o Apache ou o IIS adicionar um cabeçalho específico se uma determinada string de consulta estiver presente?

Eu quero que todas as URLs com "download = 1" na string de consulta sejam exibidas com Content-Disposition: attachment .

Título estranho da pergunta porque originalmente era apenas sobre o Apache, mas agora adicionei o IIS também.

    
por RomanSt 06.11.2012 / 11:34

1 resposta

7

mod_rewrite com mod_headers torna isso possível da seguinte forma:

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

Não testou isso com qualquer coisa que contenha não-ASCII ou espaços. Esses provavelmente acabarão mostrando no nome do arquivo escape por URL, ou seja, "% 20", etc.
Edit: caracteres especiais devem funcionar muito bem.

Eu tive que fazer o mesmo no IIS 7.5, então aqui está a maneira de fazer isso: coloque o seguinte XML na seção <system.webServer><rewrite> ... do site:

<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>

(obviamente, se você já tiver um elemento <outboundRules> , coloque apenas a regra dentro do elemento existente)

    
por 06.11.2012 / 15:56