Refuser l'accès direct aux fichiers ou de répertoire à l'aide .htaccess

Je suis en train de jouer avec .htaccess et je me demandais si avec un .htaccess à l'intérieur du répertoire racine est possible de bloquer toutes les demande à partir d'un navigateur dirigé sur les fichiers existants ou répertoires.

Nous allons essayer cet exemple:

RewriteEngine On

RewriteBase /~my_user/my_base/

RewriteRule ^list/$ list.php [L]
RewriteRule ^element_of_list/([a-zA-Z0-9\-]+)/$ element.php?elem_id=$1 [L]

Maintenant, si j'écris http://127.0.0.1/~my_user/my_base/list/, c'est wroking bien, mais si j'écris http://127.0.0.1/~my_user/my_base/list.php il travaille toujours. Je n'en veux pas. Je veux que l'utilisateur d'obtenir une erreur 404 dans le dernier cas.

Nous avons /etc/apache2/mods-enabled/userdir.conf

<IfModule mod_userdir.c>
        UserDir public_html
        UserDir disabled root

        <Directory /home/*/public_html>
                AllowOverride All
                Options Indexes FollowSymLinks
                <Limit GET POST OPTIONS>
                        Order allow,deny
                        Allow from all
                </Limit>
                <LimitExcept GET POST OPTIONS>
                        Order deny,allow
                        Deny from all
                </LimitExcept>
        </Directory>
</IfModule>

Mon premier essai était d'utiliser RewriteCond:

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ 404.php [L]

Mais cela ne fonctionne pas. Chaque requête se termine redirigé vers 404.php

Mise à JOUR

J'ai donc réussi à créer le filtre pour les répertoires:

RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_URI} !^/~my_user/my_base/$ [NC]
RewriteRule ^(.*)$ 404.php [L]

Ce qu'il fait est de vérifier si le chemin demandé (REQUEST_FILENAME) existe et est un répertoire ET si ce n'est pas mon RewriteBase qui est essentiellement index.php puis rediriger vers 404.php

Je suis encore à essayer de trouver quelque chose qui fait la même chose pour les fichiers. Je sais que je peux sélectivement le faire à l'aide des extensions de nom de fichier mais j'ai envie d'une filtre universel pour les fichiers.

OriginalL'auteur dierre | 2010-09-24