Jak rozwiązać błąd „ExpiresActive tu niedozwolony” w pliku .htaccess?

11

Próbuję dodać nagłówki Expires do odpowiedzi HTTP w witrynie, nad którą pracuję. Jedynym sposobem na kontrolowanie serwera Apache 1.3 jest edycja mojego pliku .htaccess. Próbowałem dodać kod, taki jak poniżej, aby włączyć nagłówki Expires:

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

Jednak powoduje to wewnętrzny błąd serwera z następującym komunikatem o błędzie w dzienniku:

Wygasa Aktywne tutaj niedozwolone

Prawdopodobnie nie mogę użyć alternatywnych metod kontroli pamięci podręcznej, ponieważ mod_headers nie jest włączony. Czy jest jakiś sposób, aby nadal włączyć nagłówek Expires za pomocą mod_expires za pomocą niektórych poleceń w pliku .htaccess?

Aktualizacja
Pamiętam, że czytałem gdzieś, że ustawienia Override w httpd.conf mogą mieć z tym coś wspólnego. Czy jest jakiś sposób na sprawdzenie, czy to rzeczywiście jest problem? Jeśli tak, to czy istnieje jakieś obejście kontroli nad buforowaniem nagłówków mojej witryny?

Daan
źródło

Odpowiedzi:

12

Ogólnie rzecz biorąc, najprostszym sposobem radzenia sobie z takimi problemami jest odwołanie się do instrukcji.

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

Dwa pola zainteresowania to Kontekst i Zastąp. Jak widzimy, można używać ExpiresActive w pliku .htaccess tak długo, jak zezwolisz na indeksy

Aktualizacja:

Aby zaspokoić potrzebę wygasania nagłówków. Sprawdź /programming/1036941/setup-expires-headers-php-apache

Mam nadzieję że to pomoże:)

Rune Nilssen
źródło
Dziękuję za odpowiedź, ale jak już moje pytanie brzmi: nie mam dostępu do konfiguracji serwera inaczej niż poprzez plik .htaccess w moim katalogu głównym. Więc jeśli AllowOverride nie jest ustawiony poprawnie, nie mam szczęścia.
Daan
Powinieneś porozmawiać o tym ze swoim dostawcą. Nie zezwalanie na indeksy jest po prostu głupie. I tak, jeśli nie mogą / nie zmienią tego, to przekreśliłeś tak daleko, jak daleko mod_expires.
Rune Nilssen
Żeby powtórzyć punkt Rune - jeśli twój usługodawca nie zmieni swojego parametru AllowOverride, nic więcej nie możesz zrobić.
DaveG
3

Dodanie „AllowOverride Indexes” do conf Apache dla folderu, w którym pracowałeś, działało dla mnie. Znalazłem rozwiązanie tutaj http://speedforce.org/2009/01/were-back/


źródło
1
Dziękuję za odpowiedź, ale jak już moje pytanie brzmi: nie mam dostępu do konfiguracji serwera inaczej niż poprzez plik .htaccess w moim katalogu głównym. Więc jeśli AllowOverride nie jest ustawiony poprawnie, nie mam szczęścia.
Daan
1

na RHEL w /etc/httpd/conf/httpd.conf

zmień AllowOverride Brak

AllowOverride Indeksy opcji FileInfo

eggroll77
źródło
2
Dziękuję za twoją odpowiedź, ale znowu, jak moje pytanie już mówi: nie mam dostępu do konfiguracji serwera inaczej niż poprzez plik .htaccess w moim katalogu głównym. Więc jeśli AllowOverride nie jest ustawiony poprawnie, nie mam szczęścia.
Daan
0

W moim przypadku mod_expires nie jest dostępny, ale moduł headers_module działa poprawnie (na 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>
Frank Nocke
źródło
0

Miałem ten sam problem na Apache 2.4 / CentOS 7. Składnia pliku konfiguracyjnego jest teraz następująca: „AllowOverride Options = Indexes”

<Directory /var/www/html/>
  Options Indexes FollowSymlinks
  AllowOverride Options=Indexes
</Directory>
Frederick Vomjupiter
źródło