Cabeçalhos personalizados (mod_headers) não exibidos em combinação com mod_rewrite

2

Eu tenho um vhost com vários nomes de domínio vinculados a ele. Estou tentando enviar cabeçalhos adicionais quando uma solicitação é feita para um determinado nome de domínio.

Aqui está o que estou fazendo (tentei tanto no vhost quanto no .htaccess, os resultados são os mesmos)

SetEnvIf HOST thishost THETAG=noindex
Header set X-Robots-Tag "%{THETAG}e" env=THETAG
Header set X-Robots-Test "Yes"

Então, basicamente, o cabeçalho X-Robots-Test deve estar sempre presente. O X-Robots-Tag só deve estar presente se o cabeçalho THETAG estiver definido, o que só é definido se o cabeçalho do host contiver "thishost".

O RewriteRule é parecido com isto, então basicamente um redirecionamento 301 da página1 para a página2

RewriteRule page1 page2 [L,R=301]

Quando uma solicitação é feita para page2, os cabeçalhos são mostrados corretamente, mas quando a solicitação é feita para page1 (e redirecionada por mod_rewrite) os cabeçalhos não estão presentes (nem mesmo o cabeçalho de teste).

Quando um redirecionamento é iniciado a partir de um script PHP ao invés de mod_rewrite, ele mostra os cabeçalhos, então eu assumo que o problema é que mod_rewrite está tomando precedência sobre mod_headers. Existe alguma maneira de corrigir isso?

    
por Tom Cannaerts 29.12.2015 / 10:45

1 resposta

1

Como @Zimmi disse nos comentários, os cabeçalhos são aplicados apenas nas respostas "Success" (códigos HTTP 2xx). Redirecionamentos são códigos 3xx e, portanto, não recebem o cabeçalho.

Se você estiver usando Header set … , use Header always set … . Se você estiver usando uma ação diferente (adicionar, anexar, etc.), use a ação apropriada.

Note, no entanto, que você não deve cegamente "definir sempre". De os documentos :

The default value of onsuccess may need to be changed to always under the circumstances similar to those listed below. Note also that repeating this directive with both conditions makes sense in some scenarios because always is not a superset of onsuccess with respect to existing headers:

You're adding a header to a non-success (non-2xx) response, such as a redirect, in which case only the table corresponding to always is used in the ultimate response. You're modifying or removing a header generated by a CGI script, in which case the CGI scripts are in the table corresponding to always and not in the default table. You're modifying or removing a header generated by some piece of the server but that header is not being found by the default onsuccess condition.

Para cabeçalhos HSTS (que é o que eu estava tentando adicionar à canonização de domínio), então parece ser a abordagem correta.

    
por 23.04.2016 / 17:06