Es allí una manera de cómo puedo configurar el servidor web Apache para devolver un mensaje de error 404 (no encontrado) código de error en lugar de 403 (prohibido) para algunos directorios específicos que quiero para no permitir al ser consultado?

He encontrado algunas soluciones, sugiriendo el uso de mod_rewrite, como por ejemplo,

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

Como finalidad el envío de 404 en lugar de 403 es tergiversar la estructura de directorios, esta solución es muy revelador, porque se le redirige a algunas ubicación diferente que hace que sea obvio que el directorio originalmente accede existe de hecho.

  • ¿esta pregunta a resolver su problema?
  • Yo no considerar esta pregunta cuando vi por primera vez (muy confuso), pero después de una segunda mirada me encontré con la línea que he estado buscando, gracias.

4 Comentarios

  1. 27

    RedirectMatch como, por ejemplo, en

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

    hace el truco, se prohíbe el acceso a todos los archivos o directorios a partir de un punto, dando un «404 error No Encontrado».

    Desde el manual de Apache: «El Redirect[Partido] directiva asigna una URL antigua a una nueva, preguntando al cliente para intentar volver a capturar el recurso en la nueva ubicación.» De forma predeterminada, Redirigir envía un 302 código de retorno, pero también puede devolver otros códigos de estado como se muestra arriba.

    • +1, pero para que coincida con un único punto en cualquier lugar de la ruta de la url, ¿realmente necesitamos las comillas y el punto de las estrellas? I. e., no podemos simplemente hacer RedirectMatch 404 /\. en lugar de RedirectMatch 404 ".*\/\..*" ?
  2. 7

    Usted 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
    
    • ¿por Qué no es upvoted suficiente? he utilizado esta solución. Es muy sencillo. Sin embargo, desde que he PHP >= 5.4.0, simplemente utiliza <?php http_response_code(404); ?> en la parte superior de la 404.php página. De esta manera puedo usar ErrorDocument *** any code *** /error/404.php y se convertirán 404 en el encabezado HTTP.
    • Lo que si quiero enviar todas las solicitudes para un único index.php frente controlador de secuencia de comandos y tiene que decidir si 404.php debe ser ejecutado?
    • no es relevante a la pregunta, que era como pedir Apache para hacer esto, no de PHP.
    • Cómo pedir Apache para hacer esto > esto es exactamente lo que .htaccess, un Apache archivo legible, no. Así que al final, esta respuesta está pidiendo a Apache para ello. Apache se ejecuta el 404.php archivo cuando hay un error 403. PHP analiza el archivo y envía la salida de a través de servidor web Apache en el navegador. ¿Dónde está la irrelevancia en esto?
    • usted simplemente necesita para redirigir todos los códigos de error para index.php y escribir el script de PHP para hacer lo necesario (comprobar y decidir si 404, a continuación, incluir 404.php de lo contrario, incluir algún otro tipo de contenido).
  3. 6

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

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

    La 1ª y 3ª línea de asegurarse de que no podemos listar el contenido de la carpeta, y si lo hace, usted recibirá un error 404.
    El RewriteCond la directiva asegura que esta reescritura regla solo se aplica al dominio principal. Desde que tengo varios subdominios, sin la rewritecond, el acceso a http://www.mydomain.com/subdomain fue también devuelve un 404, que no era lo que yo pretendía.

    • Esto funciona bien para mí. Sólo uno de los problemas es la forma en que Options -Indexes funciona: /img/ (que no existe) correctamente devuelve un error 404, pero /img/ (que existe y quiero acceder, pero no un listado de directorios) devuelve un 403. Así, lo que hice fue quitar Options -Indexes y solo asegúrese de que las expresiones regulares (que permite especificar los archivos) nunca coinciden con sólo un nombre de directorio.
    • *Que no es un subdominio, pero un sub-sitio de…, podría ser evitada por RewriteCond para directorio de verificación (… -d …)…
  4. -2

    Para cambiar todos los 403,400 errores en errores 404, de poner esto en el final de /etc/apache2/conf.d/localizada-error-páginas 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."
    
    • Me dio +1 30 Minutos, y saben me doy cuenta: HTML devuelve error 404, pero el código de estado HTTP todavía devuelve «HTTP/1.1 403 Forbidden» (Debe ser -1 vez)!
    • Es el trabajo. Véase mi edición en stackoverflow.com/questions/6479198/…

Dejar respuesta

Please enter your comment!
Please enter your name here