2013-05-25 8 views
10

Ho una manciata di directory con contenuti che non cambieranno mai.Apache: imposta max-age o scade in .htaccess per la directory

E 'possibile creare un file .htaccess che dice al browser che qualcosa in questa directory e sottodirectory può essere memorizzato nella cache per un tempo molto lungo?

Vorrei copiare lo stesso file .htaccess in ogni directory, se possibile.

Se ciò è possibile, consiglieresti di trascorrere il periodo di validità massima o entrambi?

risposta

19

Così lo fa apparire possibile .... la sintassi del file .htaccess è:

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

Questo si spegnerà Etags e accendere Cache-Control: max-age

Poi mettere questo. file .htaccess nella directory e tutti i file (tra cui è sub-directory verranno memorizzati nella cache per 1 anno.

ho deciso di mettere tutto il mio contenuto della cache-grado sotto una directory principale singolo e modificare il httpd.conf come

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

Sono ancora in fase di test. Spero solo che questo non spenga Etags per il resto del sito. Finora sembra che funzioni come previsto.


UPDATE (dopo 6 mesi):

Impostazione della ExpiresDefault e permettendo di e-tag è la cosa migliore da fare.

in httpd.conf:

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

Assicurarsi che "somedir" è all'interno della radice apache (come htdocs).

Consentire l'e-tag è un bene perché dopo 1 anno, il browser convaliderà nuovamente il file passando l'e-tag. Il server Web invierà un 304 - Non modificato e reimposterà l'età massima a 1 anno. Questo è molto efficiente.

Tutto sommato, è possibile guardare il file di log di apache e vedere che gli elementi in/cache dir vengono iniziati una volta.

Nota: ho trovato che l'impostazione Header append Cache-Control "public" è ok, se lo si desidera.


Versione finale:

Ecco la versione finale: (basta aggiungere questo al fondo della httd.conf)

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

Ispezione dell'intestazione dovrebbe rivelare questo:

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 

Ciò:

  1. Impostare il max-age per 1 anno (il più lungo consigliato)
  2. Inviare il scade il tag di 1 anno
  3. Invia un Etag, quindi dopo 1 anno il browser eseguirà la validazione di ETAG
  4. Consentire ai dispositivi/servizi di memorizzazione nella cache di essere in grado di memorizzare il file per 1 anno.
2

Cordiali saluti, se farete ciò che è menzionato sopra e Apache non si riavvia, allora si può essere sempre questo errore:

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

Potete trovare questo errore facendo clic su "Start", digita "Gestione computer", avviarlo, nella struttura ad albero "Visualizzatore eventi -> Registri di Windows -> Applicazione". Ecco dove ho trovato l'errore sopra.

facile correzione, basta togliere il commento riga in httpd.conf:

#LoadModule expires_module modules/mod_expires.so 
Problemi correlati