Установка различных заголовков кэширования для difrerent перенаправлений с помощью Apache mod_rewrite

Смотрите на VIPRE sunbeltsoftware.com с их новой версией VIPRE Premium. Это теперь включает Великий китайский файрвол с программой AV. Получите Домашнюю версию, и можно по закону установить на любом количестве компьютеров, которые находятся под контролем NP. Я использовал их продукт в течение приблизительно 6 лет, и это - лучшая версия, и с лицензией пакета семейства мне установили его на всех 14 из моих ПК в моей домашней сети. Брандмауэр может быть установлен на простой или расширенный режим (расширенный режим, Вы обучаете его со временем, и он помнит, какие сайты, приложения, и т.д. Вы авторизовали для выполнения). Это находит проблемы с системами, которые заявляют McAfee и AVG, прекрасны, и они обновляют свои конфигурационные файлы (AV) по крайней мере один раз в день. Приложение не является пожирателем ресурсов ни один в Вашей системе в отличие от некоторых из них. Можно даже установить полностью рабочую копию и использовать ее в течение 15 дней, просто быть уверены, что никакая другая программа AV не работает, или она могла замедлить систему фактором 50% или лучше.

3
задан 5 September 2011 в 08:52
5 ответов

Есть способ сделать это, но не с помощью mod_expires. Вместо этого вы должны установить переменную среды с помощью mod_rewrite, а затем условно добавить правильные заголовки кеширования с помощью mod_headers, как описано в Марк С. Колич: Установите заголовки Cache-Control и Expires при перенаправлении с помощью mod_rewrite .

Итак, мое окончательное решение выглядит так:

RewriteRule ... [last,redirect=301,env=longexpiry:1]
RewriteRule ... [last,redirect=302,env=nocache:1]

Header always set Cache-Control "no-store, no-cache, must-revalidate" env=nocache
Header always set Cache-Control "max-age=86400" env=longexpiry

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

6
ответ дан 3 December 2019 в 05:16

Вы можете попробовать использовать директиву SetEnvIf из Apache mod_setenvif . Примерно так (не тестировалось):

SetEnvIf Request_URI \.gif EXPIRES1DAY
Header set Cache-Control max-age=86400 env=EXPIRES1DAY
0
ответ дан 3 December 2019 в 05:16

Для этого вам необходимо создать другой виртуальный хост с другими настройками, а для перенаправлений, которые вы хотите использовать в «этой ситуации», используйте вместо этого этот vHost. Это не PHP-код, это язык Apache. Сожалею. Нет никаких «если-то».

0
ответ дан 3 December 2019 в 05:16

Расширяя ответ @Francois Marier, мне нужно было правило перезаписи, которое выглядит так без перенаправления 30X:

RewriteRule ^version/[0-9a-z\-]*/(.*)$ /foo/$1 [E=versioncache:1]

И поскольку я хотел использовать кэш версий в Правило набора заголовков , оно должно быть:

Header always set Cache-Control "max-age=86400" env=REWRITE_versioncache

Как вы думаете, сколько времени мне понадобится, чтобы понять, почему очевидное ... env = versioncache не сработало? Благодарю за этот ответ за подсказку о добавлении apache REWRITE_ .

1
ответ дан 3 December 2019 в 05:16

Одним из способов решения этой проблемы без удаления срока действия по умолчанию, установленного mod_expires, является добавление блока для URL, который перенаправляется. Допустим, вы перенаправляете в папку с версией и периодически меняете эту версию:

RewriteRule ^/approot/(.*)  /approot.1.2.3.4/$1 [R=307,L]

Если вы не хотите, чтобы это перенаправление кэшировалось (но вы действительно хотите, чтобы кэшировалось фактическое содержимое), просто добавьте этот блок в свой конфигурация:

<Location /approot>
    ExpiresActive Off
</Location>

Конечно, « / Approot » представляет любой URL-адрес, который вы перенаправляете.

Просто и легко. Вам не нужно возиться с уже работающей конфигурацией mod_expires. Вам не нужно пытаться добавлять или удалять заголовки с помощью mod_headers. Вы просто говорите mod_expires, чтобы он не добавлял заголовки для URL, который вы перенаправляете.

Сначала я попробовал принятый выше ответ (от Francois Marier), но он не сработал, потому что я не хотел отключать свой ExpiresDefault , а затем необходимо воспроизвести истечение срока действия во многих различных областях конфигурации вместо него.

0
ответ дан 3 December 2019 в 05:16

Теги

Похожие вопросы