Ver Mensaje Individual
  #6 (permalink)  
Antiguo 12/01/2012, 11:10
Avatar de charlyalegret
charlyalegret
 
Fecha de Ingreso: septiembre-2011
Ubicación: Barcelona
Mensajes: 705
Antigüedad: 13 años, 2 meses
Puntos: 140
Respuesta: Errores personalizados con .htaccess

Sí! Lo que te ponía era un ejemplo general y sencillo porque no sabía si conocias php o no!
Evidentemente, la estructura de cada web puede ser mucho más compleja que eso.

Si trabajas de esa manera (todo a un archivo, y desde allí, incluyes un apartado u otro), entonces facilmente puedes mostrar siempre la página de error manteniendo la url. Wordpress, por ejemplo, trabaja así: Todo el tráfico va a una página, y ahí, le monta la cabecera y luego el contenido dependiendo de las variables de url.

En mi caso, por ejemplo, tengo la web como tu, trabajo con varias páginas y directorios, la malloría dinámicas, algunas estáticas. Por ejemplo, como trabajo con idiomas, tengo carpetas /es y /en. Ahí sí mediante htacess, dirigo todas las url a una página u otra, y si se escribe algo mal, pues no pasa la validación correspondiente y te muestra error manteniendo la url.

Por ejemplo, tengo:

Código Apache:
Ver original
  1. RewriteRule ^es/articulos/(.+)$ productes.php?variable1=$1&idioma=es [L]
  2. RewriteRule ^es/(.+)/(.+)$ seccions.php?variable2=$1&variable3=$2&idioma=es [L]
  3. RewriteRule ^es/(.+)$ altres.php?variable4=$1&idioma=es [L]

luego en cada uno de los archivos tengo al inicio algo como:

Código PHP:
Ver original
  1. $variable1= $_GET['variable1'];
  2. if ($variable1 == "muebles")
  3.     include('loquesea')
  4. elseif ($variable1 == "menaje")
  5.         include('loquesea2')
  6. else {
  7.     header("HTTP/1.0 404 Not Found");
  8.     header("Status: 404 Not Found");
  9.     include("404.php");
  10.     exit();
  11.     }

De esta manera:

Si entran en miweb.com/es/articulos/mueble ---> Ok!
Si entran en miweb.com/es/articulos/menaje---> Ok!
Si entran en miweb.com/es/articulos/motos---> No!! la página existe ya que me dirije a productes.php?variable1=motos&idioma=es
y productes.php existe. Pero según el if, lo que hago es mandar una cabecera 404 not found, incluyo el contenido de mi archivo personalizado de error, y se mantiene la url original. Es interesante porque además, desde por ejemplo google analytics ves que han accedido/intentado acceder a esa página, y puedes darte cuenta de errores o intentos raros de la gente.

Por otro lado, si alguien entra en miweb.com/articulos ---> no tengo ni un archivo llamado así, ni ninguna redirección: me mandará directamente a la página 404.php, por tener definido en .htaccess la linea
ErrorDocument 404 miweb.com/404.php

Saludos!