Comment rediriger toutes les requêtes vers un fichier, sauf les images utilisant Apache?

j'en ai un .fichier htaccess avec le contenu suivant:

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteRule ^(.*)$ entryPoint.php [QSA]
</IfModule>

Avec ceci, je veux les demandes pour être redirigé vers le fichier entryPoint.php afin qu'il puisse les examiner:

  • S'il n'y a pas d'extension, is doit être un module
  • S'il y a un .php, c'est un piratage
  • Si c'est un .png, alors c'est un appel" sûr".

    Dans le cas d'images, j'ai utilisé pour la sortie des en-têtes, et file_get_contents() leur contenu. J'ai pensé que c'est un peu plus lent que de laisser un direct lecture.

Ma question est:

comment prévenir cela .htaccess à partir de l'appelant entryPoint.php s'il y a des références pour les images?

commentaires supplémentaires sur le code que j'ai déjà est grandement apprécié!

19
demandé sur Zuul 2011-08-15 05:21:37

3 réponses

comme je comprends que vous voulez traiter tous les non-images jeté votre fichier php. Droit?

Si oui, alors voici ce que vous avez besoin de:

Options +FollowSymLinks +ExecCGI

<IfModule mod_rewrite.c>

RewriteEngine On
RewriteCond %{REQUEST_URI}  !(\.png|\.jpg|\.gif|\.jpeg|\.bmp)$
RewriteRule (.*)  entryPoint.php [QSA]

</IfModule>

N'oubliez pas d'Ajouter pour supprimer n'importe quelle extension d'image que vous voulez! Si j'ai mal compris, dites-moi de corriger ma réponse!

40
répondu undone 2012-10-12 16:00:07
RewriteCond %{REQUEST_FILENAME} !\.(png|jpg|gif)$

mettez cette ligne juste avant votre RewriteRule

7
répondu zerkms 2011-08-15 01:30:13

vous pouvez utiliser quelque chose comme ça pour arrêter de réécrire des images

RewriteRule \.(jpg|png)$ - [L]

cette règle dit 'si le fichier demandé se termine par une période suivie de "jpg" ou "png" alors ne le réécrit pas.'

$ le caractère marque juste "la fin de la chaîne / nom de fichier", le - dit "ne pas réécrire l'URL si cette règle correspond à", et le [L] signifie " Ne pas traiter plus de règles si celle-ci correspond.

je vais ajouter que la manière habituelle de traiter ce une sorte de chose est de simplement appliquer une déclaration générale de "si ce fichier existe, servez-le directement, mais tout ce qui n'existe pas est traité par PHP."Ce type de règle ressemble à ceci:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?request= [L,QSA]

ceci dit "si la requête n'est pas pour un fichier ou un répertoire qui existe, passez la requête à index.php avec le chemin d'origine passé comme paramètre de chaîne de requête appelé 'request', ajoutant tout autre paramètre de chaîne de requête à la nouvelle requête."

6
répondu AgentConundrum 2011-08-15 01:32:30