• User Attivo

    Add Expires headers

    Ciao a tutti, ho configurato l'HTACCESS con W3 Total Cache (il sito è in wordpress). su Yslow mi da come problema Add Expires headers anche se sono stati configurati nell'HTACCESS e in W3TC. Dove e quale può essere il problema?


  • ModSenior

    Prova a riportare cosa hai scritto nel file .htaccess.

    Valerio Notarfrancesco


  • User Attivo

    Dovrebbe essere questa la parte di codice:

    <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css A31536000
    ExpiresByType application/x-javascript A31536000
    ExpiresByType text/html A31536000
    ExpiresByType text/richtext A31536000
    ExpiresByType image/svg+xml A31536000
    ExpiresByType text/plain A31536000
    ExpiresByType text/xsd A31536000
    ExpiresByType text/xsl A31536000
    ExpiresByType text/xml A31536000
    ExpiresByType video/asf A31536000
    ExpiresByType video/avi A31536000
    ExpiresByType image/bmp A31536000
    ExpiresByType application/java A31536000
    ExpiresByType video/divx A31536000
    ExpiresByType application/msword A31536000
    ExpiresByType application/x-msdownload A31536000
    ExpiresByType image/gif A31536000
    ExpiresByType application/x-gzip A31536000
    ExpiresByType image/x-icon A31536000
    ExpiresByType image/jpeg A31536000
    ExpiresByType application/vnd.ms-access A31536000
    ExpiresByType audio/midi A31536000
    ExpiresByType video/quicktime A31536000
    ExpiresByType audio/mpeg A31536000
    ExpiresByType video/mp4 A31536000
    ExpiresByType video/mpeg A31536000
    ExpiresByType application/vnd.ms-project A31536000
    ExpiresByType application/vnd.oasis.opendocument.database A31536000
    ExpiresByType application/vnd.oasis.opendocument.chart A31536000
    ExpiresByType application/vnd.oasis.opendocument.formula A31536000
    ExpiresByType application/vnd.oasis.opendocument.graphics A31536000
    ExpiresByType application/vnd.oasis.opendocument.presentation A31536000
    ExpiresByType application/vnd.oasis.opendocument.spreadsheet A31536000
    ExpiresByType application/vnd.oasis.opendocument.text A31536000
    ExpiresByType audio/ogg A31536000
    ExpiresByType application/pdf A31536000
    ExpiresByType image/png A31536000
    ExpiresByType application/vnd.ms-powerpoint A31536000
    ExpiresByType audio/x-realaudio A31536000
    ExpiresByType application/x-shockwave-flash A31536000
    ExpiresByType application/x-tar A31536000
    ExpiresByType image/tiff A31536000
    ExpiresByType audio/wav A31536000
    ExpiresByType audio/wma A31536000
    ExpiresByType application/vnd.ms-write A31536000
    ExpiresByType application/vnd.ms-excel A31536000
    ExpiresByType application/zip A31536000
    </IfModule>

    Comunque non l'ho inserita io manualmente, l'ha generata automaticamente il plugin. Per la configurazione di W3TC ho seguito un paio di guide e credo di aver capito come funzioni, ma yslow mi da questo errore che non riesco a correggere con nessuna configurazione.Ho copiato anche alcune righe di htaccess da dei siti che piegavano come risolvere questo problema ma i risultati sono stati o che non andava più il sito, oppure nessun risultato come ora.


  • ModSenior

    Non sono un sistemista, ma forse il problema è che il server dove ti appoggi non supporta il mod_expires.
    Prova in alternativa quest'altro tipo di istruzione che invece richiede attivo il mod_headers, magari disabilitando momentaneamente la gestione del plug-in in modo che tu possa modificare a mano il file .htaccess:

    <FilesMatch ".(jpg|jpeg|png|gif|css|js)$">
    Header set Cache-Control "max-age=37739520, public"
    </FilesMatch>

    Valerio Notarfrancesco


  • Super User

    Ciao esiste un modo per aggiungere gli Expires headers che non richieda ne mod_expires ne mod_headers? Il mio hosting non li supporta...Grazie


  • ModSenior

    Se nessuno ha altre idee per agire lato server potresti sempre impostare l'Expires usando un linguaggio come php o asp.
    Se puoi usare il php ad esempio, potresti fare una cosa del genere:
    [PHP]<?php header('Expires: 31 Dec 2020 01:00:00 GMT');[/PHP]
    oppure
    [PHP]<?php header('Expires: ' . gmdate('D, d M Y H:i:s', time()+2592000) . ' GMT'); ?>[/PHP]
    2592000 imposta la data di 30 giorni avanti (606024*30)

    Valerio Notarfrancesco


  • Super User

    Grazie mille. Non essendo molto esperta, dove devo scriverlo questo codice?


  • ModSenior

    Lo devi scrivere come prima istruzione del file php (può anche funzionare con i file html facendoli processare all'interprete php), cioè prima di ogni altro output, anche dell'intestazione html.

    Questo se lo devi fare per file singoli. Se ti serve per Wordpress puoi inserire l'istruzione come prima riga del file header.php del tuo tema (oppure nel file che per primo viene richiamato dal tuo tema se non rispecchia gli standard).

    Valerio Notarfrancesco


  • Super User

    Ho provato entrambi i codici ma non sembravano funzionare. Infatti Gtmetrix mi segnava oltre 60 componenti "without a far-future expiration date."

    Per scrupolo ho invece provato questo nel file .htaccess

    
    <FilesMatch "\.(jpg|jpeg|png|gif|css|js)$">
    Header set Cache-Control "max-age=37739520, public"
    </FilesMatch> 
    
    

    E i componenti sono scesi a 10. Prova fatto più volte. Non mi spiego la cosa visto che il supporto del mio hosting mi ha detto che mod_expires e mod_headers non sono abilitati. Voi che dite?


  • ModSenior

    Che il mod_headers è abilitato, almeno per adesso. Visto che ti hanno detto che non lo supportano potrebbero rimuoverlo in qualunque momento.
    Cosa intendi per "ho provato entrambi i codici"?

    Valerio Notarfrancesco


  • Super User

    Intendevo i due codici in PHP che hai postato sopra. Li ho inseriti in header.php ma il primo causava un errore di sintassi mentre l'altro appunto sembrava non funzionare. Per ora lascio così, starò a vedere.


  • ModSenior

    Nel primo in effetti è sbagliata la sintassi della data, manca il giorno.
    Il secondo l'ho provato adesso su un blog Wp di prova e funziona. Prova con uno dei tanti siti che ti analizzano gli header per vedere cosa succede, oppure questa estensione per Firefox addons.mozilla.org/en-us/firefox/addon/live-http-headers/
    Quando inserisci l'istruzione devi vederla negli header del flusso http restituito dalla pagina.
    Se la vedi significa che stai fornendo una corretta informazione al browser che non ricaricherà un elemento che ha già in cache, e tu raggiungi lo scopo di velocizzare il sito.

    Valerio Notarfrancesco