Apache: Defina cabeçalhos globais somente se ainda não estiverem definidos

2

Estou tendo uma situação um pouco chata aqui.

Eu tenho um servidor gerenciado pelo plesk. Na configuração baseada em /etc/apache2/apache2.conf mod_headers e mod_expires ocorre. Por exemplo:

<filesMatch "\.(jpg|jpeg|png|gif|swf)$">
    Header set Cache-Control "max-age=604800, public"
</filesMatch>

Isso está funcionando muito bem.

Eu tenho um problema com alguns dos meus aplicativos. Eu quero aplicativo para manter o controle sobre o cache, se quiser. Atualmente isso não é possível, porque as configurações de cabeçalho ocorrem imediatamente antes de retornar a resposta ao cliente, o que significa que após o aplicativo ter concluído todas as suas ações. Os cabeçalhos definidos pelo aplicativo serão sobrescritos.

Header merge Cache-Controll...

não está funcionando, porque apenas acrescenta a string de cabeçalho dada. E duvido que os navegadores lidem com cabeçalhos como este, como eu gostaria que eles:

Cache-Control max-age=0, no-cache, no-store, must-revalidate, max-age=604800, public

A minha pergunta agora é: Existe uma possibilidade de definir o cabeçalho apenas se houver absolutamente sem conteúdo no cabeçalho específico "campo"? Eu não quero que meu aplicativo defina quaisquer variáveis de ambiente, porque um aplicativo não deve ser alterado para atender às necessidades de um servidor.

Eu também tentei - apenas para fins de teste - remover o cabeçalho via vhost.conf para um domínio específico. Mas ele é executado antes da configuração do cabeçalho no apache2.conf, o que significa que eles também seriam sobrescritos.

    
por func0der 05.03.2013 / 17:39

2 respostas

3

Acho que você pode fazer isso usando Header edit . O molho secreto é uma afirmação negativa antecipada:

Header edit Cache-control "^(?!.*max-age.*)(.*)" "max-age=604800,"

A ideia é que ^(?!.*max-age.*)(.*) corresponda ao início do valor do cabeçalho se a string max-age não existir em nenhum lugar do cabeçalho. Se a partida for bem-sucedida (o que significa que "max-age" ainda não existe), ela insere "max-age = 604800", seguida pelo restante do cabeçalho original.

EDITAR: O Apache usa o PCRE, portanto, talvez seja necessário usar $1 em vez de na cadeia de substituição.

    
por 05.03.2013 / 18:20
4

Apache 2.4.7:

Header setifempty Access-Control-Allow-Origin "*"

Apache 2.2.4 abaixo

Header append Access-Control-Allow-Origin ""
Header edit Access-Control-Allow-Origin "^$" "*"
    
por 28.07.2015 / 21:44