2009-03-27 3 views
4

У меня есть редирект в Apache конфигурации, какКак добавить дополнительные заголовки в 302 перенаправления в Apache?

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

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

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

ExpiresActive На ExpiresDefault "доступ плюс 10 минут"

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

+1

Конфигурация Apache? Через какой язык программирования? –

ответ

0

Проверьте модуль 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> 

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

+8

Кроме того, это не работает, потому что заголовки не добавляются при выполнении перенаправления. –

+0

не работает в apache 2.2 – Thomasleveil

14
<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); без ключевого слова «always», директива «Набор заголовков» работает только с ответами на успех, то есть ответами HTTP 2xx.

1

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

Это именно то, что я пытаюсь сделать. К сожалению, это решение не работает для меня. Кажется, что переменные среды не работают с перенаправлением. Единственное решение, которое я нашел, это опустить предложение env = ', которое работает, но также отправляет заголовок Strict-Transport-Security в простых HTTP-запросах. –

Смежные вопросы