Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

213
Views
Cómo usar .htaccess para redirigir una página pero también usarlo como W3 include

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.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

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.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!