Question

Je sais que nous pouvons facilement baser un RewriteCond sur n'importe quel http demande entête.Mais pouvons-nous vérifier (certains) des réponse en-têtes qui vont être envoyés ?En particulier, le Dernière modification un?

Je souhaite réécrire une URL uniquement lorsque la date de dernière modification date de plus de 30 minutes et j'essaie d'éviter la surcharge liée à la délégation de cette vérification à un fichier php à chaque fois qu'un fichier de ce répertoire est demandé.

Merci d'avance!

Était-ce utile?

La solution

Les en-têtes sortants n'existent pas avant much plus tard que mod_rewrite agit.Il n'existe pas non plus de fonctionnalité de vérification du temps de modification des fichiers intégrée à mod_rewrite, donc le plus proche de votre utilisation est de créer un Réécrire la carte de la variété External Rewriting Program pour savoir si le fichier en question a été modifié.

Si je comprends bien votre application, vous pouvez également envisager de supprimer par une tâche cron les fichiers de ce répertoire datant de plus de 30 minutes, puis de les réécrire dans une condition d'inexistence de fichier.

Autres conseils

Non, ce n'est pas possible.Mais tu pourrais utiliser un réécrire la carte pour obtenir ces informations à partir d'un programme avec moins de surcharge que PHP, peut-être un script shell.

Voici un exemple de 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 déclaration de la carte de réécriture doit être placée dans le fichier de configuration de votre serveur ou de votre hôte virtuel car le programme n'est démarré qu'une seule fois et attend ensuite une entrée :

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

Et puis vous pouvez utiliser cette carte de réécriture comme ceci (exemple .htaccess) :

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

Avez-vous envisagé d'utiliser mod_proxy, mod_cache et/ou squid ?On dirait que vous essayez de lancer votre propre mise en cache...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top