RewriteRule controllo in corso del file in rewriten percorso del file esiste

Come utilizzare il ModRewrite per verificare se un file di cache esiste, e se lo fa, riscrivere i file di cache e altrimenti riscrivere un file dinamici.

Io per esempio ho la seguente struttura di cartelle:

pages.php 
cache/
pages/
1.html 
2.html 
textToo.html 
ecc. 

Come si imposta la RewriteRules per questa richiesta può essere inviata come questo:

example.com/pages/1 

E se il file di cache esiste riscrivere tot il file di cache, e se il file di cache non esiste, riscrivere pagine.php?p=1

Dovrebbe essere qualcosa di simile a questo: (nota: questo non funziona, altrimenti non avrei chiesto questo)

RewriteRule ^pagine/([^/\.]+) cache/pagine/$1.html [NC,QSA] 
RewriteCond %{REQUEST_FILENAME} -f [NC,O] 
RewriteCond %{REQUEST_FILENAME} -d [NC] 
RewriteRule cache/pagine/([^/\.]+).le pagine html.php?p=$1 [NC,QSA,L] 

Posso off grossa farlo usando il PHP, ma ho pensato che doveva essere possibile con il mod_rewrite.

InformationsquelleAutor Pim Jager | 2009-01-22

 

2 Replies
  1. 17
    RewriteRule ^pages/([^/\.]+) cache/pages/$1.html [NC,QSA]
    
    # At this point, we would have already re-written pages/4 to cache/pages/4.html
    RewriteCond %{REQUEST_FILENAME} !-f
    
    # If the above RewriteCond succeeded, we don't have a cache, so rewrite to 
    # the pages.php URI, otherwise we fall off the end and go with the
    # cache/pages/4.html
    RewriteRule ^cache/pages/([^/\.]+).html pages.php?p=$1 [NC,QSA,L]
    

    Spegnimento MultiViews è fondamentale (se li avete abilitato) pure.

    Options -MultiViews
    

    Altrimenti la richiesta iniziale (/pagine/…) viene convertito automaticamente in /pages.php prima di mod_rewrite a calci. È anche possibile rinominare pages.php per qualcosa di diverso (e di aggiornare l’ultima regola di riscrittura) per evitare il MultiViews conflitto.

    Edit: ho inizialmente incluso RewriteCond ... !-d ma è estraneo.

  2. 6

    Un altro approccio potrebbe essere quello di prima, se c’è un chached rappresentazione disponibili:

    RewriteCond %{DOCUMENT_ROOT}/cache/$0 -f
    RewriteRule ^pages/[^/\.]+$ cache/$0.html [L,QSA]
    
    RewriteRule ^pages/([^/\.]+)$ pages.php?p=$1 [L,QSA]
    

Lascia un commento