Question

Est-il possible que je peux configurer le serveur Web Apache pour renvoyer un code d'erreur 404 (introuvable) au lieu de 403 (interdit) pour certains répertoires spécifiques que je veux désavouer à accéder?

J'ai trouvé des solutions suggérant l'utilisation de mod_rewrite, comme par exemple.

RewriteEngine On
RewriteRule ^.*$ /404 [L]

En vue d'envoyer 404 au lieu de 403 est à obscurcir la structure de répertoire, cette solution est trop révélateur, car il redirige vers une autre emplacement qui le rend évident que le répertoire initialement accessible existe effectivement.

Était-ce utile?

La solution

RedirectMatch comme dans par exemple.

RedirectMatch 404 ".*\/\..*"

fait le tour, il interdit l'accès à tous les fichiers ou répertoires commençant par un point, donnant un « 404 Not Found » erreur.

Dans le manuel Apache: « La directive Redirect [match] mappe une ancienne URL dans un nouveau en demandant au client de réextrayez la ressource au nouvel emplacement. » Par défaut, Rediriger envoie un code 302 de retour, mais il peut retour également d'autres codes d'état, comme indiqué ci-dessus.

Autres conseils

Vous pouvez faire quelque chose comme ceci:

.htaccess

  

ErrorDocument 403 /error/404.php

404.php

<?php
$status = $_SERVER['REDIRECT_STATUS'] = 404;
header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $status);
?>

404 Error

Après avoir le même problème, je me suis retrouvé avec le fichier .htaccess suivant

Options -Indexes
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain.com [NC]
RewriteRule ^(.*)/$ - [R=404,NC]

La 1ère et 3ème ligne vous assurer que vous ne pouvez pas lister le contenu du dossier, et si vous le faites, vous recevrez une erreur 404. directive de RewriteCond assure que cette règle de réécriture applique uniquement au domaine principal. Depuis que j'ai plusieurs sous-domaines, sans rewritecond, l'accès www.mydomain.com/subdomain a également été un retour 404, qui n'a pas été ce que je voulais.

Pour modifier toutes les erreurs 403,400 en 404 erreurs, mettre cela à la fin de /etc/apache2/conf.d/localized-error-pages ou en .htaccess

# Will raise a 404 error, because the file <fake_file_for_apache_404.php> doesn't exist.
# We change 403 or 400 to 404 !
ErrorDocument 400 /fake_file_for_apache_404.php
ErrorDocument 403 /fake_file_for_apache_404.php
# We need to rewrite 404 error, else we will have "fake_file_for_apache_404.php not found"
ErrorDocument 404 "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL <script type=\"text/javascript\">document.write(document.location.pathname);</script> was not found on this server.</p></body></html>"
ErrorDocument 500 "Server in update. Please comme back later."
scroll top