Pregunta

¿Hay una manera de cómo puedo configurar el servidor web Apache para devolver una (no encontrado) código de error 404 en lugar de 403 (prohibido) para algunos directorios específicos que quiero para no permitir que se accede?

he encontrado algunas soluciones que sugieren el uso de mod_rewrite, como por ejemplo.

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

A medida que el propósito de enviar 404 en lugar de 403 es para ocultar la estructura de directorios, esta solución es demasiado revelador, ya que vuelve a dirigir a algún lugar diferente, lo que hace que sea obvio que el directorio se accede inicialmente existe en realidad.

¿Fue útil?

Solución

RedirectMatch como en por ejemplo.

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

hace el truco, que prohíbe el acceso a todos los archivos o directorios que comienzan con un punto, dando un error "404 Not Found".

Desde el manual de Apache: "La redirección [partido] Directiva asigna una dirección URL anterior en uno nuevo por pedir al cliente que vuelva a recuperar el recurso en la nueva ubicación." Por defecto, redirigida envía un código de retorno de 302, pero puede también devolver otros códigos de estado como se muestra arriba.

Otros consejos

Se puede hacer algo como esto:

.htaccess

  

ErrorDocument 403 /error/404.php

404.php

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

404 Error

Después de tener el mismo problema, que terminó con el siguiente archivo .htaccess

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

La primera y la tercera línea de asegurar que no se puede enumerar el contenido de la carpeta, y si lo hace, usted recibirá un error 404. El Directiva RewriteCond asegura que esta regla de reescritura sólo se aplica al dominio principal. Ya que tengo varios subdominios, sin la RewriteCond, acceder www.mydomain.com/subdomain también regresaba un 404, que no era lo que pretendía.

Para cambiar todos 403,400 errores en errores 404, poner esto en el extremo de /etc/apache2/conf.d/localized-error-pages O en un .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."
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top