mod_rewrite RiscriviCond in base all'ultima modifica?(.htaccess)
-
19-09-2019 - |
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!
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...