2014-02-09 9 views
7

Я использовал это раньше;Установить заголовок Content-Type

<IfModule mod_expires.c> 
    ExpiresActive On 
    ExpiresByType image/gif "now plus 2 weeks" 
    // Lots omitted here 
</IfModule> 

И это;

<IfModule mod_headers.c> 
    <filesMatch "\\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|JPG)$"> 
    Header set Cache-Control "max-age=1209600" 
    </filesMatch> 
    // Lots omitted here 
</IfModule> 

Я могу установить, что срок действия истекает по типу контента, и я могу установить любой заголовок, который я желаю, с помощью расширения файла.

Но ни один из них, похоже, не позволяет вам устанавливать любой заголовок, который вы хотите по типу контента.

Я хочу установить заголовок управления кешем на основе типа содержимого ответа - обратите внимание, что это не то же самое, что расширение файла. У меня есть «дружественные URL-адреса», поэтому нет расширения файла, которое должно быть записано filesMatch, поэтому нет расширения файла, но тип содержимого - text/html.

Как настроить заголовок управления кешем для определенных типов контента?

+0

существует ли заголовок Cache-Control в ответе? –

+0

«Как настроить заголовок управления кешем для определенных типов контента?» - Это то, что делает директива 'ExpiresByType' (ну, в частности, она устанавливает директиву' max-age' заголовка 'Cache-Control', а также заголовок' Expires' для обратной совместимости). Однако, если вы хотите установить «любой заголовок» или конкретные директивы в заголовке «Cache-Control», вам понадобится другой метод. – MrWhite

ответ

6

В 2.4 вы можете добавить expr = в директиву заголовка вместо env =.

В режиме по умолчанию (не рано), mod_headers работает как фильтр - так тип содержимого уже установлен и доступен по выражению парсер

http://httpd.apache.org/docs/2.4/expr.html

+0

Спасибо, но я нахожусь на версии 2.2 –

-1

Я думаю, вы должны будете сначала добавьте или установите заголовок Cache-Control. Попробуйте приведенный ниже фрагмент и не забудьте параметр «no-transform».

<IfModule mod_expires.c> 
    ExpiresActive On 
    ExpiresByType image/gif "now plus 2 weeks" 
    // Lots omitted here 

    //This is the magic 
    <IfModule mod_headers.c> 
    Header append Cache-Control "public, no-transform" 
    </IfModule> 

</IfModule> 
+2

Я тоже этого не понимаю. 'Header append Cache-Control 'public, no-transform" 'не учитывает тип содержимого? –

+0

Обратите внимание, что перед Apache 2.2.12 невозможно было установить заголовок 'Cache-Control' с директивой' Header'. – MrWhite

-2

Если вы хотите, чтобы сделать кэш-тип содержимого вы можете ввести его таким образом:

<IfModule mod_expires.c> 

ExpiresActive on 

ExpiresByType text/html "access plus 15 days" 

</IfModule> 
+0

Это устанавливает заголовок 'ExpiresByType'. Это не то, что мне нужно. Мне нужно иметь возможность устанавливать 'Cache-Control' по типу содержимого. –

+0

@JakeN "Это устанавливает заголовок ExpiresByType." - Наверное, вы имели в виду заголовок 'Expires',' ExpiresByType' - это mod_expires _directive_. Но даже на Apache 2.0 это также должно устанавливать заголовок 'Cache-Control' (с помощью типа mime /' Content-Type'). AFAIK вам придется вернуться к Apache 1.3 для этого, чтобы _only_ установить заголовок 'Expires'. – MrWhite

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