Usando o .htaccess "pasta" regras para forçar diferentes tipos de disposição de conteúdo?

1

Estou usando um CDN de origem para distribuir arquivos rapidamente agora. Ele puxa os arquivos da origem, incluindo o "tipo" do arquivo (download / octect-stream agora) e envia para o cliente.

Para isso, tenho a seguinte estrutura de servidor da Web:

http://www.server.com/files/code/file.mp4

No diretório "files", eu coloquei um arquivo .htaccess para forçar um download (caso contrário, seria apenas iniciar o streaming do arquivo de vídeo):

<Files *.*>
    ForceType application/octet-stream
    Header set Content-Disposition attachment
</Files> 

Agora, gostaria de permitir os arquivos para download e os arquivos de streaming da mesma pasta. Como você pode criar "aliases" de uma pasta usando o mesmo arquivo .htaccess, eu gostaria de criar o seguinte:

http://www.server.com/files/code/file.mp4 -> download
http://www.server.com/streams/code/file.mp4 -> "stream" exactly the same file

Como isso pode ser feito?

    
por Taapo 10.12.2016 / 21:09

1 resposta

0
ForceType application/octet-stream

Não deve ser necessário substituir o correto Content-Type para forçar um download. A configuração do cabeçalho Content-Disposition apropriado deve ser suficiente em todos os navegadores modernos.

you can create "aliases" of a folder using the same .htaccess file

Sim, mais ou menos. Embora você não seja capaz de usar o mesmo .htaccess no diretório /files - se é isso que você está sugerindo?

Tente o seguinte ... remova o arquivo .htaccess no diretório /files e adicione as seguintes diretivas ao arquivo .htaccess na raiz do documento (ou subdiretório apropriado). Essas diretrizes podem precisar chegar perto do topo se você tiver diretivas existentes - a ordem pode ser importante.

RewriteEngine On

# Force download all direct requests to the ./files directory
RewriteCond %{REDIRECT_STATUS} ^$
RewriteRule ^files/ - [E=FORCE_DOWNLOAD:1,T=application/octet-stream]

# Internally rewrite requests for ./streams to ./files
RewriteRule ^streams/(.+) files/$1 [L]

# Only set the Content-Disposition header when forcing a download
Header set Content-Disposition attachment env=FORCE_DOWNLOAD

O código acima ainda substitui o Content-Type ao forçar um download (por exemplo, T=application/octet-stream flag no RewriteRule ). Embora eu acredite que isso deva ser evitado.

A verificação da diretiva RewriteCond em relação a THE_REQUEST REDIRECT_STATUS impede solicitações para o diretório ./streams "virtual" que também está sendo baixado. Ele garante que apenas solicitações "diretas" para o diretório ./files sejam baixadas.

    
por 11.12.2016 / 01:46