No poder encontrar sus archivos JavaScript y CSS es un problema del lado del cliente / navegador relacionado con su ruta URL, no es algo que deba solucionarse .htaccess
(al menos no en este caso), aunque es porque está cambiando esto URL-ruta (en .htaccess
) que está experimentando este problema.
Como @closetnoc sugirió en los comentarios, este problema se debe al uso de URL relativas en su HTML. ¿Relativo a qué? Recuerde, es el agente de usuario / navegador el que resuelve las URL relativas en su HTML, no el servidor. Por lo tanto, debe corregir sus URL; no .htaccess
.
Por ejemplo, si hace referencia a su archivo CSS con una URL relativa del formulario href="styles.css"
(nota, sin prefijo de barra) y actualmente se encuentra en la URL, example.com/view.php?id=15
entonces el navegador resolverá naturalmente su URL CSS y la solicitud example.com/styles.css
(en la raíz del documento). Sin embargo, si usted está actualmente en la URL example.com/watch/15
(de hecho, en un /watch
"directorio" [* 1] ), el navegador va a resolver su relación URL CSS relativa a un /watch
subdirectorio, en lugar de la raíz del documento, por lo que terminan con un absoluto / resuelto URL del formulario example.com/watch/styles.css
.
( [* 1] Tenga en cuenta que "subdirectorio" en este contexto no es necesariamente un subdirectorio físico en su servidor, es un "subdirectorio" en la ruta URL; un segmento de ruta adicional. Pero el navegador no sabe la diferencia. )
Lo mismo se aplica si está utilizando URL relativas en sus documentos de error personalizados (definidos con la ErrorDocument
directiva en Apache). El documento de error personalizado se puede invocar en cualquier URL, por lo que cualquier URL relativa a un recurso estático (CSS, imagen, JS, etc.) será relativa a la URL que causó el error, no relativa al documento de error en sí (la ubicación de la cual está efectivamente oculta del usuario-agente).
Si cambiara sus URL de JavaScript y CSS para que sean relativas a la raíz (comenzando con una barra diagonal) o incluso absolutas, entonces no obtendría este problema. Este sería el método preferido. Alternativamente, puede usar el base
elemento ...
base
etiqueta / elemento
Alternativamente, puede incluir un base
elemento en la head
sección de su documento HTML (aunque esto no está exento de advertencias [* 2] ). Esto hace referencia a la URL absoluta con la que todas las URL relativas son relativas . En otras palabras, dado que espera que estas URL relativas sean relativas a la raíz del documento, agregue lo siguiente a la head
sección:
<base href="http://example.com/">
Ahora, una URL relativa como la styles.css
referenciada en un documento en URL /watch/15
solicitará http://example.com/styles.css
, no http://example.com/watch/styles.css
.
[* 2] Sin embargo, hay algunas advertencias sobre el uso delbase
elemento. Una preocupación principal es que cualquierURL relativa destinada aldocumento actual ahora se dirigirá a la URL base. Esto puede afectar los anclajes en la página, como lashref="#top"
URL del formulario,href="?sortby=date"
etc. Y también losform
elementos que se envían a sí mismos utilizando unaction
atributovacío(por ejemplo<form action="" ...
). Estas URL relativas que se dirigen al documento actual necesitarán ser modificadas para incluir la URL completa de la página actual (lo que puede evitar el punto de usar labase
etiqueta como una solución para empezar).
Referencia: