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 originalRewriteRule ^es/articulos/(.+)$ productes.php?variable1=$1&idioma=es [L]
RewriteRule ^es/(.+)/(.+)$ seccions.php?variable2=$1&variable3=$2&idioma=es [L]
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$variable1= $_GET['variable1'];
if ($variable1 == "muebles")
include('loquesea')
elseif ($variable1 == "menaje")
include('loquesea2')
else {
header("HTTP/1.0 404 Not Found"); header("Status: 404 Not Found"); include("404.php");
}
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!