2010-10-19 6 views
17

Para resumir, tengo páginas dinámicas en un sitio web que muestran comentarios. Si no hay comentarios asociados a una ciudad/condado/área en particular/etc la consulta MySQL devuelve 0 filas que desencadena el siguiente código:incluir después de que el encabezado de PHP 404 muestre "Vaya, parece que este enlace está roto".

if (!$validRevQuery) { 
    header("HTTP/1.0 404 Not Found"); 
    include("http://{$PDS['site']}/404.php?request=".urlencode($_SERVER['REQUEST_URI'])); 
    exit; 
} 

En algunos servicios de alojamiento web esto desencadena una "URL del archivo real está desactivado" error . Lo cual está bien, pero en los que permiten el acceso a archivos URL, el archivo 404 se incluye y se muestra correctamente. He cambiado ligeramente el código para mostrar una ruta absoluta de este modo:

if (!$validRevQuery) { 
    header("HTTP/1.0 404 Not Found"); 
    $_GET['request'] = urlencode($_SERVER['REQUEST_URI']); 
    include($_SERVER['DOCUMENT_ROOT']."/404.php"); 
    exit; 
} 

Y ahora, me está dando el genérico "! Vaya Este enlace parece no estar funcionando." página de error (Tengo la barra de herramientas de Google, por lo que puede ser diferente según el navegador y los complementos). No tengo idea de por qué sucede esto, ¡así que cualquier ayuda es apreciada!

+0

La fija- '$ _GET [ 'solicitud']' trabajo? No es algo que haya intentado hacer. ¿No puedes simplemente llamar a '$ _SERVER ['REQUEST_URI']' desde 404.php? Pensé que funcionaría, ya que solo un URI ha sido solicitado por el servidor web. Creo que las cosas de Google muestran ese mensaje genérico cuando el contenido proporcionado 404 es demasiado pequeño (no estoy seguro de la longitud exacta del personaje, Google lo;;)) – chigley

+0

Establecer una variable 'GET' suena como una mala práctica de ninguna manera. –

+0

establecer la variable GET fue solo una solución rápida, y sí lo he hecho antes y funciona. Trataré de encontrar una solución alternativa a eso. :) – Yev

Respuesta

42

Su problema no tiene nada que ver con lo que incluye: es que su página es demasiado pequeña.

En mi experiencia, se muestra la página "Oops" incorporada de Chrome, como la de Internet Explorer, cuando la página emite solamente el encabezado 404 y menos de un número definido de bytes de contenido (creo que son 512 bytes en IE, no conozco el límite en Chrome).

Tiendo a rellenar mis páginas 404 con unos cientos de bytes de contenido sin sentido envuelto en comentarios HTML para asegurarme de que se muestre la página 404 personalizada.

O, por supuesto, aprovechar la oportunidad para algunos ASCII Art cool!

<!--       oooo ooo 
            $ $ $ $ 
            "o $ $ o"" 
            o " "ooooo 
           oo ""   o$ 
        o   o   oo " 
        $$    $o$""$o ooo$ 
        $"$   o $ "$ $ 
     o$o  $ "$   $ $  $ $ 
     $$$o  $$ "$  o$ $  o $o 
     "$ ""o "$ "o  $$ "o  o" 
    $o $$ "o $  "oo $" $ o$" 
     "$ $o "o$$  "o$ $o$" oo$ 
     "o "$o      "$o $"$$ 
      "  oo$$$$$$$oo  $oo$$""  o" o 
"""""""""  o$$$$$$$$$$$"$o    o"""$o$$ o$ 
     ooo$$$"o$$$$$$$$$$$$$$ "$o o o$$$o $ $ o$ 
    o$$$$$$$$$$$$$$$$$$$$$$$$ "oo o  ""o "$ $ 
    $$$$$$$$$$$$$$$$$$$$$$$$$$  "$o o$$"""$  " oo""o 
o""""$$$$$$$$$$$$$$$$$$$$$$"   ""$o"$o   " o$ 
    "$$$$$$$$""""$""$$$""    "$oo$""$o  o$""" 
     $$$$$$$"       $""""$" o"""" 
     $"""""$ooooo  ooooo$$$$$$$  o$" o" 
     $  """" oooo$$$$$$$$$$$$$$"  $" o" 
     oo$ oooo$$$$$$$$$$$"""""$$$$" o$" o$" 
    "$ $o$$$$$$$$$$$$$""$  o$$$"oooo$" o" 
     "o$ "$$$$$$$$$$$$   $$o$"$$$ $" 
     "$ ""$$$$$$$$$  o$"$$$ "$$o$$ 
      "o ""$$$$$$o  o$$$$ ""$o """$ 
      "$o ""$$$$$$o" o$$$$oo o$$$$ 
       ""$oo  $$" "$$$"" ooooooo$ 
        """"$" o$" oo$$$$$""$$ 
         $ oo$" o$$$$$"" ooo$ 
         $o$" o$$$$" oo$$$$$$$o 
         $$ o$$$" o$$$$$$"""""$o 
         "o$$" o$$$$"" o$$$$$$$o 
          "$oo$$$$" o$$$$$""" o$o 
          "$$$" oo$$$"" oo$$$$$$$ 
          ooooo$oo$$$"" oo$$$$"""$$"" 
         $"oooo $$$" o$$$$""  $ 
         o$"o$ $$"oo$$""  " o$ 
         $ o$$o $$o$$"   oo$$ 
         $ $$$$ $$$$$$$$$$$$$$$$$$$$ 
         $ $$$$ $$$$$$$$$$$$$$$$$$$$" 
         $ $$$$ $$$$$$$$$$$$$$$$$$$$ 
         $ "" ""$$$$$$$$$"""$"""" 
         $o   $"$" " $" 
         $o  $$ $o o$ 
         "$o o$$ ""$$$" 
          """""" --> 
+7

El contenido 404 personalizado debe ser mayor de 512 bytes para no ser ignorado. Haría 2K de datos sin sentido solo para estar seguro. Muchos navegadores hacen esto. – Brad

+0

Woah, eso tiene mucho sentido. 404.php tenía un error en la parte superior, y como el mensaje de error era más corto que, digamos 512 bytes, no mostraba nada. ¡Gracias! – Yev

+5

Nota para las personas que se preguntan por qué esto no funciona: esta solución no funciona en Firefox si su página de error no tiene el encabezado 'Content-Length', sino que confía en' Connection: close' para finalizar la respuesta. – RichieHindle

-4

Intentando redirigir el uso de un 307 o 301 con un encabezado de ubicación

Cuestiones relacionadas