2012-04-26 14 views
5

Ehi lì!htaccess - riscrittura condizionale e scadenza

Ho una cartella /static nel mio webroot del server Apache 2.x. Se una richiesta corrisponde

/static/<somename like [\S-_]+>.(png|jpg|css|js)/\d{8,15} 

ad esempio

/static/bg.jpg/1335455634 

Voglio due cose:

  • url deve essere riscritto per /static/bg.jpg (sbarazzarsi del timestamp)
  • Esso diventa a never-expire ('scade il 2030, max-età = 290304000, cache pubblica, ...)

Se la richiesta non corrisponde, la richiesta e le intestazioni dovrebbero essere normali, nessuna riscrittura. Idealmente, qualsiasi richiesta esterna/statica/* non dovrebbe essere influenzata (anche se "coincidenti timbri finali" dovrebbero essere rari ...)

Non ho altro che problemi con FilesMatch/RewriteCond, quindi preferisco non postare i miei scarsi tentativi. .. (Riscrivi in ​​genereal è abilitato sulla mia macchina e possiedo i diritti per inviare intestazioni relative alla cache)

Dankeschön!

risposta

2

Che ne dici di qualcosa del genere?

RewriteEngine on 
RewriteRule ^static/([^/]+\.(png|jpg|css|js))x?/\d{8,15}$ /static/$1 [NC,L] 

<FilesMatch "\.(png|jpg|css|js)$"> 
    <IfModule mod_expires.c> 
     ExpiresActive On 
    </IfModule> 
    <IfModule mod_headers.c> 
     ExpiresDefault "access plus 10 years" 
    </IfModule> 
</FilesMatch> 
+0

Grazie. Lo * cercherò * e lo testerò. Chiedo la tua pazienza per altri 2-3 giorni. –

+0

Nessun problema. Felice di aiutare. A proposito, questo è uno strumento molto utile per testare le regole htaccess - http://htaccess.madewithlove.be/ – jesal

+0

Grazie. La tua soluzione, rispettivamente, entrambe le soluzioni funzionano. Una cosa sembra impossibile: i file non riscritti scadono regolarmente e solo i file riscritti ottengono la scadenza. Sembra che FileMatch si preoccupi solo del file finalmente aperto, niente che accada prima. Indipendentemente se collocato sopra o sotto la regola di riscrittura. In altre parole, tutti i jpg, le png ora non scadono mai. Quindi, anche se vado per 'static/simple.jpgx/123456789' (è per questo che ho temporaneamente bloccato in' x? '), Viene abbinato. –

4
Options +FollowSymLinks -MultiViews 
# Turn mod_rewrite on 
RewriteEngine On 
RewriteBase/

RewriteRule ^static/([^.]+\.(png|jpe?g|css|js))/\d{8,15}$ static/$1 [L,R,NC] 

# now set expire date to today + 1 year 
<IfModule mod_expires.c> 
    ExpiresActive on 
    ExpiresByType image/jpeg "access plus 1 years" 
    ExpiresByType image/png "access plus 1 years" 
    ExpiresByType text/css "access plus 1 years" 
    ExpiresByType text/js "access plus 1 years" 
    ExpiresByType text/javascript "access plus 1 years" 
    ExpiresByType application/javascript "access plus 1 years" 
    ExpiresByType application/x-javascript "access plus 1 years" 
</IfModule> 

ho scelto iccess plus 1 years per mai scade perché ho trovato questo sul web:

"Per contrassegnare una risposta come "Nessuna scadenza", un server di origine invia un Scade la data circa un anno dal momento in cui la risposta è inviata. Server HTTP/1.1 NON DOVREBBE inviare date di Scadenza più di uno anni in futuro. "

Dal HTTP 1.1 RFC

+0

Grazie anche a te. Vedi sopra. –

+0

Funziona bene per me, mi chiedo se dovrei aggiungere anche .gif lì ... – adrianTNT

+0

Sì, puoi anche aggiungere ".gif". – anubhava

Problemi correlati