Domanda

So che possiamo facilmente basare un RewriteCond su qualsiasi http richiesta intestazione.Ma possiamo controllare (alcuni) di risposta intestazioni che verranno inviate?In particolare, il Ultima modifica uno?

Voglio riscrivere un URL solo quando la data dell'ultima modifica è precedente a 30 minuti e sto cercando di evitare il sovraccarico di delegare quel controllo a un file php ogni volta che viene richiesto un file da quella directory.

Grazie in anticipo!

È stato utile?

Soluzione

Le intestazioni in uscita non esistono finché much più tardi di mod_rewrite sta agendo.Inoltre, non è incorporata alcuna funzionalità di controllo del tempo di modifica dei file mod_rewrite, quindi la cosa più vicina che otterresti usandolo è creare a RiscriviMappa della varietà Programma di riscrittura esterna per scoprire se il file in questione è stato modificato.

Se ho capito bene la tua applicazione, potresti anche valutare se un processo cron elimina i file in quella directory che sono più vecchi di 30 minuti e quindi riscriverli in una condizione di inesistenza del file.

Altri suggerimenti

No, non è possibile.Ma potresti usare a riscrivere la mappa per ottenere tali informazioni da un programma con meno sovraccarico di PHP, magari uno script di shell.

Ecco un esempio di script bash:

#!/usr/bin/env bash
while read line; do
    max_age=${line%%:*}
    filename=${line#*:}
    if [[ -f $filename ]]; then
        lm=$(stat -f %m "$filename")
        if [[ $(date +%s)-$lm -le $max_age ]]; then
            echo yes
        else
            echo no
        fi
    else
        echo no
    fi
done

La dichiarazione della mappa di riscrittura deve essere inserita nel file di configurazione del server o dell'host virtuale poiché il programma viene avviato una sola volta e quindi attende l'input:

RewriteMap last-modified-within prg:/absolute/file/system/path/to/last-modified-within.sh

E poi puoi usare quella mappa di riscrittura in questo modo (esempio .htaccess):

RewriteCond %{last-modified-within:30:%{REQUEST_FILENAME}} =yes
RewriteRule ^foo/bar$ - [L]
RewriteRule ^foo/bar$ script.php [L]

Hai considerato l'utilizzo di mod_proxy, mod_cache e/o Squid?Sembra che tu stia cercando di eseguire il rollout della tua memorizzazione nella cache...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top