Como enviar cabeçalhos de disposição de conteúdo no apache para arquivos?

8

Eu tenho um diretório de arquivos de texto que estou exibindo com o apache 2. Normalmente, quando eu (ou qualquer usuário) acesso os arquivos que eles os veem no navegador. Quero 'forçar' * o navegador da Web a exibir uma caixa de diálogo 'Salvar como'. Eu sei que isso é possível com os Content-Dispositioncabeçalhos ( mais informações ).

Existe alguma maneira de ativar isso para cada arquivo?

Idealmente, eu gostaria de algo assim:

<Directory textfiles>
   AutoAddContentDispositionHeaders On
</Directory>

E o apache definiria o cabeçalho de disposição do conteúdo correto, incluindo o mesmo nome de arquivo.

Algo como isso pode ser possível com a Headerdiretiva apache .

Pontos de bônus se ele estiver incluído no apache no debian.

Eu poderia fazer um script de wrapper PHP simples que capte um filenameargumento, faça a chamada header(...)e depois imprima o arquivo, mas então eu tenho que validar a entrada etc., que é o trabalho que estou tentando evitar.


* Eu sei que você não pode realmente forçar as coisas quando se trata da web

Rory
fonte

Respostas:

11

Eu descobri que isso faz o que eu quero:

<Location /textfiles>
    SetEnvIf Request_URI "^.*/([^/]*)$" FILENAME=$1
    Header set "Content-disposition" "attachment; filename=%{FILENAME}e"
    UnsetEnv FILENAME
</Location>
Rory
fonte
Para que serve o "e" no final do nome do arquivo? Vejo que não funciona sem ele, mas não entendo o que faz.
Mark E. Haase
Significa apenas que "o conteúdo da variável de ambiente denominada FILENAME" (consulte a documentação de mod_headers: httpd.apache.org/docs/current/mod/mod_headers.html )
Ale
1

mod_headers deve ser o que você está procurando:

<IfModule mod_headers.c> 
  <Location ~ ".*/textfiles/.*"> 
    Header set Content-Disposition attachment
  </Location>
</IfModule>
cristão
fonte
Um bom começo, mas eu também quero o nome do arquivo lá para que ele apareça o (mesmo) nome do arquivo. No entanto eu encontrei uma solução semelhante
Rory