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é!
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!
RewriteCond %{REQUEST_FILENAME} !\.(png|jpg|gif)$
mettez cette ligne juste avant votre RewriteRule
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."