Как добавить дополнительные заголовки к 302 перенаправлениям в Apache? - PullRequest
4 голосов
/ 27 марта 2009

У меня есть перенаправление в конфигурации Apache, например

Перенаправление temp /foo.xml http://www.baz.com/foo.xml

Я пытаюсь добавить заголовки Expire и m-cache для CDN к этому 302. Это будет тривиально в php, но мне нужно сделать это в файлах конфигурации Apache.

Обычно это делается так:

ExpiresActive On ExpiresDefault "Доступ плюс 10 минут"

но, похоже, это не работает только для 302 перенаправлений. Есть предложения?

Ответы [ 3 ]

14 голосов
/ 15 ноября 2010
<Location /foo.xml>
   Redirect temp /foo.xml http://www.baz.com/foo.xml
   Header always set ExpiresActive On
   Header always set ExpiresDefault "access plus 10 minutes"
</Location>

, чтобы заставить его работать даже с ответами HTTP 302 (фактически, с любым ответом HTTP); без ключевого слова " всегда " директива "Набор заголовков" работает только с успешными ответами, то есть с ответами HTTP 2xx.

2 голосов
/ 08 января 2018

Обратите внимание на странную ошибку в Apache 2.2 (наблюдаемую в Apache 2.2.15), которая затрудняет это, если вы используете env=HTTPS для контроля, когда устанавливается заголовок. По какой-то причине env=HTTPS не срабатывает во время перенаправления, даже если RewriteCond %{HTTPS} on используется для управления перенаправлением. Таким образом, в моей конфигурации, которая включает HTTP Strict Transport Security (HSTS), я использую RewriteRule для создания переменной среды с именем X_HTTPS, которая имеет то же значение, что и HTTPS, но не имеет значение null, когда env=X_HTTPS оценивается:

SetEnv HSTS "max-age=31536000; includeSubDomains; preload"

# For some reason in Apache 2.2, HTTPS env variable is not available during redirects
RewriteCond %{HTTPS} on
RewriteRule ^.*$ - [ENV=X_HTTPS:%{HTTPS}]
# Set HSTS Header if the page is delivered via SSL
Header always set Strict-Transport-Security %{HSTS}e env=X_HTTPS

# Redirect SSL-only non-www page to www and quit
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^example\.com$
RewriteRule ^(.*)$ https://www.%{SERVER_NAME}%{REQUEST_URI} [R=303,L]

# Redirect ANY non-SSL page to SSL
RewriteCond %{HTTPS} !on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=303,L]
0 голосов
/ 27 марта 2009

Проверьте модуль mod_headers для Apache.

Возможно, что-то вроде:

<Location /foo.xml>
   Redirect temp /foo.xml http://www.baz.com/foo.xml
   Header always set ExpiresActive On
   Header always set ExpiresDefault "access plus 10 minutes"
</Location>

Я отредактировал этот ответ (поскольку он был принят), добавив ключевое слово всегда , чтобы отразить то, что исправление правильно указало ниже.

...