Foros del Web » Creando para Internet » Diseño web »

Obtener nombre de pagina tras error 404

Estas en el tema de Obtener nombre de pagina tras error 404 en el foro de Diseño web en Foros del Web. Hola. Quisiera saber si hay alguna manera de obtener el nombre de la pagina en donde se hizo click a la hora de obtener el ...
  #1 (permalink)  
Antiguo 05/05/2010, 14:00
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Obtener nombre de pagina tras error 404

Hola. Quisiera saber si hay alguna manera de obtener el nombre de la pagina en donde se hizo click a la hora de obtener el error 404.

Se que en la 404 no se puede obtener ni variables GET ni POST. Pero estoy queriendo hacer una variable de session con PHP para almacenar el nombre de la pagina que no existe.

Quisiera evitar javascript. Pero bueno, ustedes dirán que es lo que se puede hacer.
  #2 (permalink)  
Antiguo 05/05/2010, 14:18
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Obtener nombre de pagina tras error 404

Ok. Leyendo un poco hoy encontré esto:

$_SERVER['REQUEST_URI']

Supuestamente eso me daría el nombre de la pagina que derivo en 404. Pero no me funciona! Lo que me da es el nombre de la pagina destino, de decir 404.php

Alguien sabe que puede estar pasando? Debería funcionar!

http://www.wikilearning.com/apuntes/..._404_php/844-1
  #3 (permalink)  
Antiguo 11/05/2010, 06:10
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 11 meses
Puntos: 65
Respuesta: Obtener nombre de pagina tras error 404

$_SERVER['HTTP_REFERER']; te da la URL de donde vino, o sea donde se hizo click

$_SERVER['REQUEST_URI']; te da la URI de la página actual, o sea la que no existe
  #4 (permalink)  
Antiguo 11/05/2010, 08:00
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Obtener nombre de pagina tras error 404

Dany! La verdad es que $_SERVER['HTTP_REFERER']; no me devuelve la pagina de origen. Para obtenerla tengo que hacer esto:

$_SESSION['referer'] = $_SERVER['HTTP_REFERER'];

Es decir, crear una variable session en la pagina de origen, para luego tenerla disponible en la 404.
  #5 (permalink)  
Antiguo 11/05/2010, 08:09
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 11 meses
Puntos: 65
Respuesta: Obtener nombre de pagina tras error 404

y qué te devuelve?
  #6 (permalink)  
Antiguo 11/05/2010, 08:20
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Obtener nombre de pagina tras error 404

Uia! Ahora si me devuelve el nombre de la pagina. No se que pudo estar pasando.

A ver... No, no. Me devuelve el nombre de la pagina en que estaba. No el nombre de la pagina inexistente. Son cosas distintas.
  #7 (permalink)  
Antiguo 11/05/2010, 08:26
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Obtener nombre de pagina tras error 404

No deberías confiar en el valor de la cabecera HTTP_REFERER, algunos agentes de usuario no lo envían o envían un valor incorrecto.

Por otro lado, a mí me funciona con $_SERVER['REQUEST_URI'], ¿dónde configuras la directiva ErrorDocument? ¿versión de Apache?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 11/05/2010, 08:30
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Obtener nombre de pagina tras error 404

Hola David. Mi Apache es 2.2.11

El $_SERVER['REQUEST_URI'] me devuelve [ruta]/404.php

Mi directiva está en .htaccess, en la carpeta principal del sitio:

Cita:
  #9 (permalink)  
Antiguo 11/05/2010, 08:32
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Obtener nombre de pagina tras error 404

Fíjate que estás usando la URL completa, eso causa que Apache redirija aún si la dirección es local, al redirigir, se pierde el valor de REQUEST_URI. Podrías usar la ruta relativa al servidor:
Código Apache:
Ver original
  1. ErrorDocument 404 /[ruta]/404.php
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #10 (permalink)  
Antiguo 11/05/2010, 08:37
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Obtener nombre de pagina tras error 404

Ok. Lo intento. Pero para eso tengo que sacarme una gran duda con respecto a "/" (la carpeta raiz).

Estando en servidor local, y con WAMP5, mi carpeta raíz es www? O es la carpeta de mi proyecto?

Y estando en servidor remoto, mi carpeta raíz es public_html?

Ahora lo pruebo y les cuento. Gracias.
  #11 (permalink)  
Antiguo 11/05/2010, 08:38
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 11 meses
Puntos: 65
Respuesta: Obtener nombre de pagina tras error 404

ah pasa que te está redireccionando porque comienza por http, fijate lo que hace cuando pones /ruta/documento.php

buh tarde mi respuesta
  #12 (permalink)  
Antiguo 11/05/2010, 08:42
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Obtener nombre de pagina tras error 404

Mh... parece que me funciona con la ruta "relativa" que comienza con /

Pero no me toma la hoja de estilo. Y ademas en la url no aparece 404.php, sino el nombre de la pagina inexistente, con variables GET incluidas! Increíble.


Creo que tendré que rediseñar todo en función de $_SERVER['REQUEST_URI']?

Lo que sí, $_SERVER['REQUEST_URI'] me está devolviendo lo que yo necesitaba! Es una variable confiable? Más que $_SERVER['HTTP_REFERER']?
  #13 (permalink)  
Antiguo 11/05/2010, 08:49
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Obtener nombre de pagina tras error 404

Sí, es confiable en el sentido de que te va a devolver la URL que no existe.

No obstante, quizás en algunos ambientes podría permitir XSS si lo imprimes en el documento sin filtro alguno (con htmlspecialchars, por ejemplo)
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #14 (permalink)  
Antiguo 11/05/2010, 08:57
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Obtener nombre de pagina tras error 404

Ok. Voy a leer un poco sobre XSS.

Saliendo del tema que estabamos tratando (el del 404), tengo que tomar una desición. En varias paginas yo hago redireccion basandome en http_referer. Por ejemplo, tras hacer un login. Lo hago para volver a la pagina en donde estaba.

Tendría que reemplazar ese http_referer por request_uri? Son equivalentes en lo que devuelven? No, no? La última es equivalente a $_SERVER['PHP_SELF'];

Que puedo hacer para el caso de las redirecciones? (lo que sería un history back en javascript)
  #15 (permalink)  
Antiguo 11/05/2010, 09:04
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Obtener nombre de pagina tras error 404

No, REQUEST_URI devuelve la página solicitada. HTTP_REFERER devuelve la página de la cual procede el usuario. Por ejemplo, si estoy en pagina2.php y sigo un enlace hacia pagina1.php, los valores serían:
Código PHP:
Ver original
  1. $_SERVER['REQUEST_URI'] = '/pagina1.php';
  2. $_SERVER['HTTP_REFERER'] = 'http://dominio/pagina2.php'; // Esto sería la respuesta normal del agente de usuario, pero depende completamente de lo que el navegador envíe en la cabecera
De si es correcto o no redireccionar a partir de ese dato, depende; lo que debes considerar es que ese dato depende completamente de lo que te envía el agente de usuario.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #16 (permalink)  
Antiguo 11/05/2010, 09:09
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Obtener nombre de pagina tras error 404

Ok. Me queda claro.

Cita:
Pero no me toma la hoja de estilo
Respecto a esto, descubrí que las rutas de lado cliente son relativas a la pagina inexistente. Mientras que las rutas de lado servidor son relativas a la posición de 404.php, que en mi caso está alojado en Library/404.php
  #17 (permalink)  
Antiguo 11/05/2010, 09:12
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 11 meses
Puntos: 65
Respuesta: Obtener nombre de pagina tras error 404

pero para redireccionar después de un login no veo problema porque es solo para manejar el flujo, distinto sería si quiero comprobar si viene desde la propia página para... no sé... darle permiso a una acción o como para restringir algo, no?


lo del css, ¿porqué no usas en al url de la hoja de estilo una url absoluta?
  #18 (permalink)  
Antiguo 11/05/2010, 09:52
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Obtener nombre de pagina tras error 404

Si, Dany. Hay un problema con http_referer, y es que algunos navegadores no envían información en sus cabeceras respecto a la "historia" de navegación. Por eso a mí en Firefox la redirección no me funciona. No se como habilitar esa variable, pero en fin. A veces no anda.

Ruta absoluta para la css? Nunca se me hubiera ocurrido, porque de hacerlo así, cada vez que cambie de servidor (local, remoto de pruebas, remoto final) tendría que modificar todas las rutas. Y no confío en imprimirlas con PHP porque se me hace un lio.

En fin. Muchas gracias Dany por revivir este tema, que ya estaba pasando desapercibido. Con David me ayudaron a que todo vaya mejor. Que estés bien!
  #19 (permalink)  
Antiguo 11/05/2010, 15:06
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 11 meses
Puntos: 65
Respuesta: Obtener nombre de pagina tras error 404

ah, yo uso constantes donde indica los directorios
algo como:

define('DOMINIO', 'http://www.dominio.com/');
define('CSS_DIR', DOMINIO.'estilos/');
define('IMG_DIR', DOMINIO.'imagenes/');

echo CSS_DIR.'layout.css';
echo CSS_DIR.'logo.gif';

asi no importa si cambio de domino, nombre de la carpeta o lo muevo a otro directorio, cambio las constantes en un archivo y listo
  #20 (permalink)  
Antiguo 11/05/2010, 15:56
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 7 meses
Puntos: 101
Respuesta: Obtener nombre de pagina tras error 404

Ya veo. Parece buena idea. Veré de incorporarla en el próximo proyecto desde un principio.
  #21 (permalink)  
Antiguo 12/05/2010, 06:42
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años, 6 meses
Puntos: 839
Respuesta: Obtener nombre de pagina tras error 404

La opción de Dany_s es correcto, la mayoría de los sistemas prefabricados lo utiliza.

Otra opción para resolver este caso puntual sería usar PHP_SELF para calcular las rutas relativas. Supongamos que tu estructura es así:
/
/css
/img
/error
/error/404.php

En ese caso, para imprimir, por ejemplo, una imagen en la página de error podrías usar algo como:
Código PHP:
Ver original
  1. $selfdir = dirname($_SERVER['PHP_SELF']);
  2. $selfdir = ($selfdir == '\\') ? '/' : $selfdir . '/';
  3. $selfdir = htmlspecialchars($selfdir);
Código HTML:
Ver original
  1. <img src="<?php echo $selfdir; ?>../img/error.png" alt="Error" />
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Etiquetas: nombre, tras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:35.