2011-12-26 6 views
1

J'ai une expression régulière qui redirige tous les fichiers dans le dossier "/ downloads" vers un script PHP qui sert ensuite le fichier (avec d'autres choses). Cependant, j'aimerais avoir des fichiers PHP que je peux voir, et ne pas les télécharger (aussi un problème de sécurité, évidemment). Cependant, je ne connais pas grand-chose à l'expression régulière. Je suis à la recherche nito, mais pas faire les bons choix :(Expression régulière exclure des fichiers spécifiques

<IfModule mod_rewrite.c> 
RewriteEngine on 

#Redirect any file coming in to the downloads manager 
RewriteRule ^(.+\.*) /downloads?file=$1 [R,L] 
</IfModule> 

La seule chose que je peux trouver à ce jour qui pourrait fonctionner est RewriteRule ^(.+\.php)$ - [L]. Cependant, cela ne fonctionne pas. Si quelqu'un pourrait expliquer rapidement ce, ou donnez-moi quelque chose qui fonctionne, ce serait génial!
Aussi, comme vous l'avez peut-être deviné, cette redirection vers le fichier index.php du fichier/downloads.Si vous pouviez expliquer pourquoi il ne se télécharge pas, ce serait Il télécharge quand je vais à downloads/index.php, mais pas simplement/téléchargements .. Pas d'information requise pour le faire fonctionner, mais je voudrais savoir :)
Merci pour les réponses.

+0

Dans votre 'RewriteRule', voulez-vous dire '. + \. *' ou '. + \ .. *'? La première recherche toute chaîne se terminant par 0 ou plusieurs périodes, alors que la seconde recherche spécifiquement une chaîne avec une période (par exemple une extension). –

+0

Le code de réécriture que vous avez publié dans le fichier 'httpd.conf' d'apache, ou est-ce dans un fichier' .htaccess'? Et si c'est dans .htaccess ce fichier est dans le répertoire '/ downloads' ou est-ce dans la racine? S'il vous plaît clarifier votre question. De plus, quels fichiers de '/ downloads' doivent être traités différemment? À l'heure actuelle, la question est un peu trop vague pour pouvoir répondre avec précision. – ridgerunner

+0

C'est un .htaccess, dans/downloads. Les fichiers PHP ne doivent pas être affectés (pas téléchargés). Si je peux ajouter d'autres types de fichiers ou des fichiers spécifiques plus tard, c'est bien. Désolé de ne pas être assez clair! –

Répondre

0

Utilisez un RewriteCond d'interdire les matchs que vous ne voulez pas:

RewriteCond %{REQUEST_URI} !\.php$ 
RewriteRule (.*) /downloads?file=$1 [R] 

(j'ai enlevé le L car il n'a pas eu d'usage ici)

+0

La ligne supérieure fonctionne très bien. Cependant, la ligne du bas crée une boucle infinie quand je viens de visiter/téléchargements /. Mon ancienne version était destinée à fonctionner quand quelque chose avait le format '\ *. \ *', Comme je le saurais. Un nom de fichier ET une extension. Il semble fonctionner avec 'RewriteCond% {REQUEST_URI}! \. Php $ RewriteRule^(. + \. *)/Downloads? File = $ 1 [R, L]', à part visiter le dossier/downloads /. Il essaie de télécharger le dossier. –

+0

Utilisez simplement 'RewriteRule (. *) /downloads.php?file=$1 [R]' pour empêcher la boucle. – Gerben

Questions connexes