2011-06-28 1 views
2

J'utilise ce code pour envoyer toute la demande à un seul fichier php:Blocage de l'extension de fichier spécifique avec htaccess?

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule (.*) myfile.php?id=$1 [QSA,L] 

Mais maintenant, je veux aussi bloquer accès direct à myfile.php et d'autres phps. Je ne veux pas que les fichiers php s'ouvrent directement via le navigateur, mais ils doivent fonctionner avec des inclusions et autres.

Comment est-ce que je peux faire ceci?

+0

Je pense que vous aurez des ennuis si vous réécrivez tout comme myfile.php mais refusent l'accès à myfile.php. Ou ai-je mal compris la question? – Sodved

+0

Les URL réécrites ressemblent à http://domain.com/stuff/substuff, et stuff/substuff est traité par myfile.php, donc le php n'est pas ouvert directement. – riviraz

Répondre

0

Peut-être que cela va aider:

RewriteCond %{REQUEST_URI} !(.*).php$ [NC] 
RewriteRule ^.* - [F,L] 

Plusieurs beaux exemples sont ici: Apache wiki: RewriteCond

+0

Mais cela ne fonctionne pas pour (disons) '.php',' .inc', '.bak',' .ext' tout à fait . Ai-je besoin d'écrire ligne par ligne pour chaque extension? –

+0

Tout fonctionne bien. Mais vous devez être sûr que RewriteEngine est, à savoir la version complète: (. *). ' RewriteEngine sur \t RewriteCond% {REQUEST_URI} php $ de [NC] \t RewriteRule ^. * - [F, L] ' – Andron

4

Vous pouvez bloquer les fichiers avec la directive Files. Pour bloquer les fichiers se terminant par .inc, faites ceci:

<Files ~ "\.inc$"> 
Order allow,deny 
Deny from all 
</Files> 
+0

Mais cela ne fonctionne pas pour (disons) '.php',' .inc', '.bak',' .ext' tout à fait. Ai-je besoin d'écrire ligne par ligne pour chaque extension? –

+0

Pour bloquer plusieurs extensions, vous pouvez simplement utiliser une regex comme '' –

+0

Veuillez noter que celui-ci pourrait ne pas fonctionner sur Apache 2.4+. Voir https://httpd.apache.org/docs/trunk/upgrading.html –

Questions connexes