Как устранить ошибку «ExpiresActive здесь не разрешено» в файле .htaccess?

11

Я пытаюсь добавить заголовки Expires к HTTP-ответам сайта, над которым я работаю. Единственный способ контролировать сервер Apache 1.3 - это отредактировать мой файл .htaccess. Я попытался добавить код, подобный следующему, чтобы включить заголовки Expires:

<IfModule mod_expires.c>
    ExpiresActive on
    ExpiresDefault "access plus 1 hour"
</IfModule>

Однако это приводит к внутренней ошибке сервера со следующим сообщением об ошибке в журнале:

ExpiresActive здесь не разрешено

Я, вероятно, не могу использовать альтернативные методы управления кэшем, так как mod_headers не включен. Можно ли как-нибудь включить заголовок Expires, используя mod_expires, с помощью некоторых команд в файле .htaccess?

Обновление
Я вспоминаю, что читал где-то, что настройки переопределения в httpd.conf могут иметь к этому какое-то отношение. Есть ли способ подтвердить, что это действительно проблема? Если это так, есть ли какой-нибудь обходной путь для контроля заголовков кэширования для моего сайта?

Даан
источник

Ответы:

12

В общем, самый простой способ справиться с такими проблемами - обратиться к руководству.

http://httpd.apache.org/docs/1.3/mod/mod_expires.html#expiresactive

Syntax:      ExpiresActive On|Off
Context:     server config, virtual host, directory, .htaccess
Override:    Indexes
Status:      Extension
Module:      mod_expires

Две области, представляющие интерес, это Context и Override. Как мы видим, можно использовать ExpiresActive в файле .htaccess, если вы используете AllowOverride Indexes.

Обновить:

Для удовлетворения ваших потребностей истекает заголовки. Проверьте /programming/1036941/setup-expires-headers-php-apache

Надеюсь это поможет:)

Руна Нильссен
источник
Спасибо за ваш ответ, но, как уже сказал мой вопрос: у меня нет доступа к конфигурации сервера, кроме как через файл .htaccess в моем веб-корне. Так что, если AllowOverride не установлен правильно, мне не повезло.
Даан
Вы должны поговорить с вашим провайдером об этом. Не разрешать индексы просто глупо. И, да, если они не могут / не изменят его, то вы вычеркнули, насколько mod_expires идет.
Руна Нильсен
Просто чтобы повторить точку зрения Руны - если ваш поставщик услуг не изменит свой параметр AllowOverride, тогда вы больше ничего не можете сделать.
DaveG
3

Добавление «AllowOverride Indexes» в конфигурацию Apache для папки, в которой у вас работает htaccess, сработало для меня. Нашел решение здесь http://speedforce.org/2009/01/were-back/


источник
1
Спасибо за ваш ответ, но, как уже сказал мой вопрос: у меня нет доступа к конфигурации сервера, кроме как через файл .htaccess в моем веб-корне. Так что, если AllowOverride не установлен правильно, мне не повезло.
Даан
1

на RHEL в /etc/httpd/conf/httpd.conf

изменить AllowOverride Нет

AllowOverride FileInfo Параметры Индексы

eggroll77
источник
2
Спасибо за ваш ответ, но опять же, как уже сказал мой вопрос: у меня нет доступа к конфигурации сервера, кроме как через файл .htaccess в моем веб-корне. Так что, если AllowOverride не установлен правильно, мне не повезло.
Даан
0

В моем случае mod_expires недоступен, но headers_module есть, это прекрасно работает (на Apache 2.0):

# match all these file types, regardless of upper/lowercase
<FilesMatch "\.(?i:jpg|png|gif|js|css)$">
    # 60 seconds * 60 minutes * 24 hours * 7 days
    Header set Cache-Control "max-age=604800, public, must-revalidate"

    # alternative: never expire headers (do look up the caveats)
    # Header set Expires "Thu, 01 Jan 2030 08:08:00 GMT"
    # Header set Cache-Control "public, no-transform"

    # further (debatable) optimizations
    # FileETag None
    # Header unset ETag
    # Header unset Last-Modified
</FilesMatch>
Фрэнк Нок
источник
0

У меня была такая же проблема на Apache 2.4 / CentOS 7. Синтаксис для файла конфигурации теперь таков: «AllowOverride Options = Indexes»

<Directory /var/www/html/>
  Options Indexes FollowSymlinks
  AllowOverride Options=Indexes
</Directory>
Фредерик Вомюпитер
источник