Estoy tratando de hacer mi url de esto:
example.com/view.php?id=15
A esto:
example.com/watch/15
Mi código en .htaccess
es el siguiente:
Options -Indexes
Options +FollowSymlinks
RewriteEngine On
RewriteRule ^watch/([^/]+) view.php?id=$1 [NC]
Ahora, si voy example.com/watch/15
, carga el contenido pero sin JS, CSS porque en este caso busca CSS y JS en la /watch
carpeta que no existe.
¿Cómo hago que esta opción funcione correctamente? No quiero crear una carpeta de observación y copiar y pegar CSS y JS para que se incruste correctamente.
htaccess
relative-urls
StuckBetweenTrees
fuente
fuente
base
elemento que hace referencia a la URL base a la que están relacionadas todas las URL relativas. @closetnoc deberías agregar eso como respuesta.Respuestas:
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 solicitudexample.com/styles.css
(en la raíz del documento). Sin embargo, si usted está actualmente en la URLexample.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 formularioexample.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 / elementoAlternativamente, puede incluir un
base
elemento en lahead
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 lahead
sección:Ahora, una URL relativa como la
styles.css
referenciada en un documento en URL/watch/15
solicitaráhttp://example.com/styles.css
, nohttp://example.com/watch/styles.css
.[* 2] Sin embargo, hay algunas advertencias sobre el uso del
base
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:
fuente