web-dev-qa-db-fra.com

Apache redirige toutes les demandes de type de fichier vers 404

J'ai des fichiers .inc que je souhaite empêcher d'être accessibles via les pages Web. Je veux simplement les rediriger vers une autre page ou lancer un 404 lors de l'accès à ces fichiers.

J'ai essayé jusqu'à présent ce qui ne restreint rien:

RewriteCond %{REQUEST_URI} .*\.(inc)
RewriteRule ^(.*)/ /logout.php [R=404,L]

Comment bloquer l'accès à tous les fichiers avec l'extension ".inc"

3

La façon habituelle de "bloquer" l'accès à ces fichiers serait de servir un 403 Forbidden.

Par exemple, en utilisant mod_authz_core sur Apache 2.4:

<Files "*.inc">
    Require all denied
</Files>

Si vous souhaitez spécifiquement répondre avec un 404 à la place, vous pouvez utiliser mod_rewrite. Cela doit aller près du haut de votre fichier de configuration. Par exemple:

RewriteEngine On

RewriteRule \.inc$ - [R=404]

Ces deux règles entraîneront le renvoi du document d'erreur 403 ou 404, que vous pouvez personnaliser à l'aide de la directive ErrorDocument. Par exemple:

ErrorDocument 404 /errors/my404.html

Juste quelques notes sur votre exemple de code:

RewriteCond %{REQUEST_URI} .*\.(inc)
RewriteRule ^(.*)/ /logout.php [R=404,L]

Cela aurait pu "fonctionner", cependant, le RewriteRulemodèle (c'est-à-dire. ^(.*)/) nécessite que l'URL contienne une barre oblique, ce qui n'est pas le cas pour tous les fichiers à la racine du document.

Cela correspond également à .inc N'importe où dans l'URL. La directive RewriteCond n'est pas requise ici - vous pouvez faire toutes les correspondances de motifs dans la directive RewriteRule.

Il n'y a pas besoin des sous-modèles capture, c'est-à-dire. les parenthèses autour de (.*) et (inc). Cela crée des "références arrières" qui ne sont pas utilisées ici.

Lorsque vous spécifiez un code de "redirection" autre que 3xx, la chaîne substitution (c'est-à-dire /logout.php) Est ignorée. Aucune redirection externe n'est déclenchée. Vous devez simplement spécifier un seul - (Trait d'union) dans ce cas. De plus, l'indicateur L (last) n'est pas requis.


À part: Ce n'est pas une bonne idée d'avoir des fichiers avec l'extension .inc S'ils sont des fichiers include/script pour votre projet (à moins qu'ils ne soient peut-être pas conservés en dehors de la racine de votre document). Comme vous l'avez peut-être réalisé, si vous le demandez directement, le navigateur les verra probablement sous forme de texte/clair et les affichera simplement tels quels dans le navigateur. Il est conseillé de toujours utiliser l'extension de script correcte si possible. par exemple. foo.inc.php.

2
MrWhite