Estoy construyendo un sitio html usando el método de inclusión que se muestra aquí de w3schools
https://www.w3schools.com/howto/howto_html_include.asp
el sitio básicamente se parece a lo siguiente
<div w3-include-html="navigation.html"></div> <body> </body> <div w3-include-html="footer.html"></div>Funciona muy bien cuando estás en las páginas correctas del sitio web, pero si navego directamente a navigation.html, muestra una página inútil y de aspecto terrible.
Traté de redirigirlo usando el archivo .htaccess con algo como lo siguiente para que un usuario pudiera aterrizar con gracia en una página que dice lo siento, esto no existe, haga clic aquí, bla, bla...
Redirigir /navegación.html /página-no-encontrada.html
sin embargo, eso termina haciendo que la barra de navegación en todas mis páginas reales muestre el html dentro de la página page-does-not-exist.html.
¿Hay alguna manera fácil de usar .htaccess para redirigir a un usuario que está escribiendo directamente www.example.com/navigation.html a www.example.com/page-not-found.html mientras permite que mis otras páginas 'incluyan' 'normalmente?
Gracias por cualquier ayuda que pueda ofrecer.
Este método utiliza JavaScript (objeto XMLHttpRequest , es decir, "AJAX") para realizar una solicitud HTTP para el documento en el servidor. Por lo general, esto no es diferente (desde la perspectiva del servidor) a una solicitud directa que el cliente podría realizar escribiendo la URL del archivo directamente.
Debe hacer que la solicitud de JavaScript sea diferente para que el servidor pueda detectarla.
Puede agregar un encabezado de solicitud HTTP personalizado (o anular la cadena User-Agent ) a la solicitud de JavaScript y verificar este encabezado usando mod_rewrite en .htaccess en el servidor para enviar una respuesta alternativa si este encabezado no está configurado como se esperaba (es decir, si el archivo se solicita directamente).
Por ejemplo, según el código de w3schools, agregue una segunda línea después de crear el objeto XMLHttpRequest :
xhttp = new XMLHttpRequest(); xhttp.setRequestHeader('User-Agent','XMLHTTP'); Esto establece el encabezado User-Agent en la solicitud JS en XMLHTTP . Luego podemos verificar esto usando mod_rewrite y servir un 404 si no está configurado.
Sin embargo, no debe "redireccionar" al script page-not-found.html . Configure esto como un documento de error 404 personalizado en su lugar y permita que Apache lo sirva.
Por ejemplo:
ErrorDocument 404 /page-not-found.html RewriteEngine On RewriteCond %{HTTP_USER_AGENT} !=XMLHTTP RewriteRule ^navigation\.html$ - [R=404] Cualquier solicitud de /navigation.html donde la cadena User-Agent no sea XMLHTTP recibe el documento de error 404 personalizado, es decir. /page-not-found.html . Por lo tanto, solo se permiten solicitudes de su secuencia de comandos.
NB: Esta no es una función de seguridad, simplemente evita que cualquier persona que escriba casualmente la URL en el navegador vea el contenido (incluidos los motores de búsqueda).
Aparte:
<div w3-include-html="navigation.html"></div> <body> </body> <div w3-include-html="footer.html"></div>
¿Parece que está incluyendo elementos HTML fuera del body HTML? Esto no es HTML válido.