Mi .htaccess redirige todas las solicitudes para /word_here a /page.php?name=word_here. El script de PHP, a continuación, comprueba si la página solicitada está en su matriz de páginas.

Si no, ¿cómo puedo simular un error 404?
He probado este, pero no el resultado en mi página de error 404 configurado a través de ErrorDocument en el .htaccess mostrando.

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");

Estoy en lo cierto al pensar que es malo para redirigir a mi página de error 404?

  • ¿Por qué usted quiere decir que no funciona? ¿Has comprobado la respuesta del servidor de cabecera?
  • En respuesta a sus conclusiones finales, sí, sería una mala idea para redirigir todo el 404 a una página real. Esto viola el HTTP spec girando algo que no debería estar allí en algo que está ahí.
InformationsquelleAutor Eric | 2009-09-04

8 Comentarios

  1. 116

    La para arriba-a-fecha de respuesta (a partir de PHP 5.4 o posterior) para la generación de páginas 404 es el uso de http_response_code:

    <?php
    http_response_code(404);
    include('my_404.php'); //provide your own HTML for the error page
    die();

    die() no es estrictamente necesario, pero se asegura de que usted no continuar con la ejecución normal.

    • en que archivo debo agregar esto?
    • Donde quiera que poner el código 404 se activará.
  2. 80

    Lo que usted está haciendo el trabajo, y el navegador recibirá un mensaje de error 404 código. Lo que no hacer es mostrar el «» no se encontró la página que usted podría estar esperando, por ejemplo:

    No Se Encontró

    La dirección URL solicitada test.php no se encontró en este servidor.

    Que es debido a que el servidor web no enviar esa página cuando PHP devuelve un 404 código (al menos Apache no). PHP es responsable por el envío de todos los de su propia producción. Así que si quieres una página similar, usted tendrá que enviar el código HTML del mismo, por ejemplo:

    <?php
    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found", true, 404);
    include("notFound.php");
    ?>

    Podría configurar Apache para usar la misma página para su propio 404 mensajes, por poner esto en httpd.conf:

    ErrorDocument 404 /notFound.php
    • Gracias. Yo supuse que utiliza mi página de error 404.
    • donde el código anterior será de uso ? es que el código para ‘.htaccess’ archivo.
    • sobre el uso de código en donde desea enviado página de error 404. En mi caso, he utilizado cuando alguno de búsqueda de un elemento con su código, pero no existía. así que el uso de código anterior, después de averiguar que el elemento no está disponible y yo solíamos salir demasiado en 3ª línea de este código, para evitar la carga de la nada después de la página de error 404. gracias JW, funcionó perfectamente para mí.
  3. 22

    Intente esto:

    <?php
    header("HTTP/1.0 404 Not Found");
    ?>
    • Así que usted cree que el cambio a HTTP 1.0 va a resolver ese problema?
    • Bien un error 404 es un 404 tanto en HTTP 1.0 y 1.1. 1.0 es una apuesta segura. Genial broma por CIERTO 🙂 +1
    • en el archivo que muestran puedo agregar esto?
    • en mi caso tengo que dar header(«Location:HTTP/1.0 404 No Encontrado»);
  4. 10

    Crear páginas de error personalizadas a través de .htaccess

    1. 404 – página no encontrada

     RewriteEngine On
     ErrorDocument 404 /404.html

    2. 500 – Error Interno Del Servidor

    RewriteEngine On
    ErrorDocument 500 /500.html

    3. 403 – Prohibido

    RewriteEngine On
    ErrorDocument 403 /403.html

    4. 400 – Bad request

    RewriteEngine On
    ErrorDocument 400 /400.html

    5. 401 – Requiere Autorización

    RewriteEngine On
    ErrorDocument 401 /401.html

    También puede redirigir todos los mensajes de error a una sola página. como

    RewriteEngine On
    ErrorDocument 404 /404.html
    ErrorDocument 500 /404.html
    ErrorDocument 403 /404.html
    ErrorDocument 400 /404.html
    ErrorDocument 401 /401.html
    • El RewriteEngine no tiene nada que ver con esto; que la línea se puede omitir de manera segura para lograr el mismo resultado.
  5. 3

    Hizo recordar a morir() después de enviar el encabezado? El 404 encabezado no se detiene automáticamente procesamiento, por lo que puede parecer que no han hecho nada, si hay más de procesamiento sucediendo.

    No es bueno para REDIRIGIR a tu página de error 404, pero se puede INCLUIR el contenido de ella sin problema. De esa manera, usted tiene una página en la que correctamente se envía un mensaje de error 404 de estado de la URL correcta, pero también tiene su «¿qué estás buscando?» de la página para el lector humano.

  6. 0

    tratar de poner

    ErrorDocument 404 /(root directory)/(error file) 

    en .htaccess archivo.

    Hacer esto para cualquier error, pero sustituir 404 para el error.

  7. 0

    En el Drupal o WordPress CMS (y probablemente otros), si usted está tratando de hacer algún código php personalizado, parece que no existe (a menos que se cumpla la condición), las siguientes obras bien haciendo el CMS 404 controlador de hacerse cargo de:

    <?php
      if(condition){
        do stuff;
      } else {
        include('index.php');
      }
    ?>
  8. -1

    Inmediatamente después de que la línea de cierre de la respuesta mediante exit o die()

    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    exit;

    o

    header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
    die();
    • Si usted hace esto, el usuario ve una página vacía. Mi pregunta era ¿cómo enviar la misma página de error 404 que me especificado con ErrorDocument, pero desde PHP.
    • si quieres usar ErrorDocument asegúrese de que la ruta de acceso al archivo de error personalizado es con respecto a la raíz del servidor ejemplo: digamos que su ruta de acceso virtual es /carpeta1/carpeta2/myhtaccess fromt él raíz del servidor errordocument se verá algo como esto ErrorDocument 404 /folder1/folder2/my404.html
    • ErrorDocument no tiene ningún efecto después de que ya ha introducido el código PHP. esta respuesta mejor explica la confusión que se enfrentan 9 años
    • Espero que tu problema se resuelve por ahora. En un fuera de tema, creo que es mejor que no redirigir con ?nombre=word_here. En su lugar, utilice $reqpath = strtok("/".trim(substr($_SERVER["REQUEST_URI"], strlen(APP_ROOT)), "/"), "?"); en su page.php archivo. Coz hay un escenario donde una de las páginas está a la espera de una consulta «nombre» del usuario.

Dejar respuesta

Please enter your comment!
Please enter your name here