2013-05-25 13 views
10

Mam kilka katalogów z treścią, która nigdy się nie zmieni.Apache: ustaw max-age lub wygasa w .htaccess dla katalogu

Czy jest możliwe utworzenie pliku .htaccess, który mówi przeglądarce, że wszystko w tym katalogu i podkatalogach może być buforowane przez bardzo długi czas?

Chciałbym skopiować ten sam plik .htaccess do każdego katalogu, jeśli to możliwe.

Jeśli jest to możliwe, czy zaleciłbyś maksymalny okres ważności ponad czas wygasania lub jedno i drugie?

Odpowiedz

19

Tak to wygląda to możliwe .... składnia plik .htaccess jest:

Header unset Last-Modified 
FileETag none 
ExpiresActive On 
ExpiresDefault "access plus 1 years" 

To wyłączy Etags i włącz Cache-Control: max-age

Następnie umieścić ten. plik .htaccess w katalogu i wszystkich plików (włącznie z nim to podkatalogi będą buforowane przez 1 rok.

postanowiłem umieścić wszystkie moje cache-stanie treści w ramach jednego katalogu i edytować httpd.conf jak

<Directory "C:\somedir\cache"> 
    Header unset Last-Modified 
    FileETag none 
    ExpiresActive On 
    ExpiresDefault "access plus 1 years" 
</Directory> 

Nadal jestem w trakcie testowania tego. Mam tylko nadzieję, że to nie wyłączy Etags dla reszty strony. Jak na razie wygląda na to, że działa zgodnie z planem.


UPDATE (po 6 miesiącach):

Ustawianie ExpiresDefault i pozwalających e-tags jest najlepszą rzeczą do zrobienia.

w httpd.conf:

<Directory "C:\somedir\cache"> 
    ExpiresActive On 
    ExpiresDefault "access plus 1 year" 
</Directory> 

Upewnij "somedir" jest wewnątrz korzenia apache (takich jak htdocs).

Pozwolenie na e-tagi jest dobre, ponieważ po 1 roku przeglądarka ponownie sprawdzi poprawność pliku, przekazując e-tag. Serwer sieciowy odeśle 304 - Nie zmodyfikowano i zresetuje maksymalny wiek do 1 roku. Jest to bardzo wydajne.

Podsumowując, można obejrzeć plik dziennika apache i zobaczyć, że elementy w katalogu/cache są uruchamiane raz.

Uwaga: Zauważyłem, że ustawienie Header append Cache-Control "public" można wykonać, jeśli chcesz.


Ostateczna wersja:

Oto ostateczna wersja: (wystarczy dodać to na dole httd.conf)

<Directory "C:\somedir\cache""> 
    ExpiresActive On 
    ExpiresDefault "access plus 1 year" 
    Header append Cache-Control "public" 
</Directory> 

Kontrola nagłówka powinny ujawnić to:

Accept-Ranges:bytes 
Cache-Control:max-age=31536000, public 
Connection:Keep-Alive 
Content-Language:en 
Content-Length:746 
Content-Type:text/css 
Date:Thu, 29 May 2014 15:23:50 GMT 
ETag:"240000000add63-2ea-4f4086d72ad01" 
Expires:Fri, 29 May 2015 15:23:50 GMT 
Keep-Alive:timeout=40, max=200 
Last-Modified:Fri, 07 Mar 2014 18:28:59 GMT 

Będzie:

  1. Ustaw max-age na 1 rok (najdłuższy zalecane)
  2. wysłać wygasa znacznik 1 roku
  3. Wyślij Etag, więc po 1 roku przeglądarka wykona oznaczenie etag
  4. Poinformuj pośrednie urządzenia/usługi buforowania, że ​​mogą buforować plik przez 1 rok.
2

FYI, jeżeli czynicie to, co jest wymienione powyżej Twój Apache nie zostanie ponownie uruchomiony, a następnie może być coraz ten błąd:

The Apache service named reported the following error: 
>>> Invalid command 'ExpiresActive', perhaps misspelled or defined by a module not included in the server configuration. 

może się okazać, że błąd, klikając „Start”, wpisać "Zarządzanie komputerem", uruchom go, w drzewie otwórz "Podgląd zdarzeń -> Dzienniki systemu Windows -> Aplikacja". Właśnie tam znalazłem powyższy błąd.

łatwo naprawić, wystarczy odkomentować tą linię w httpd.conf:

#LoadModule expires_module modules/mod_expires.so 
Powiązane problemy