Ne pas pouvoir trouver vos fichiers JavaScript et CSS est un problème côté client / navigateur lié à votre chemin URL, ce n'est pas quelque chose qui devrait être corrigé .htaccess
(du moins pas dans ce cas) - bien que ce soit parce que vous changez cela URL-chemin (en .htaccess
) que vous rencontrez ce problème.
Comme l'a suggéré @closetnoc dans les commentaires, ce problème est dû à l'utilisation d'URL relatives dans votre code HTML. Par rapport à quoi? N'oubliez pas que c'est l'agent utilisateur / navigateur qui résout les URL relatives dans votre code HTML, pas le serveur. Vous devez donc corriger vos URL; non .htaccess
.
Par exemple, si vous faites référence à votre fichier CSS avec une URL relative du formulaire href="styles.css"
(remarque, pas de préfixe slash) et que vous êtes actuellement à l'URL, example.com/view.php?id=15
le navigateur résoudra naturellement votre URL CSS et demande example.com/styles.css
(à la racine du document). Toutefois, si vous êtes actuellement à l'URL example.com/watch/15
(efficace dans un /watch
« sous - répertoire » [* 1] ), le navigateur va résoudre votre rapport URL CSS par rapport à un /watch
sous - répertoire, plutôt que la racine du document, si vous vous retrouvez avec un absolu / résolu URL du formulaire example.com/watch/styles.css
.
( [* 1] Notez que "sous-répertoire" dans ce contexte n'est pas nécessairement un sous-répertoire physique sur votre serveur - c'est un "sous-répertoire" dans le chemin URL; un segment de chemin supplémentaire. Mais le navigateur ne connaît pas la différence. )
La même chose s'applique si vous utilisez des URL relatives dans vos documents d'erreur personnalisés (définis avec la ErrorDocument
directive sur Apache). Le document d'erreur personnalisé peut potentiellement être appelé sur n'importe quelle URL, donc toute URL relative à une ressource statique (CSS, image, JS, etc.) va être relative à l'URL à l'origine de l'erreur, et non au document d'erreur lui-même (dont l'emplacement est effectivement caché à l'agent utilisateur).
Si vous avez modifié vos URL JavaScript et CSS pour qu'elles soient relatives à la racine (en commençant par une barre oblique) ou même absolues, vous n'obtiendrez pas ce problème. Ce serait la méthode préférée. Alternativement, vous pouvez utiliser l' base
élément ...
base
tag / élément
Alternativement, vous pouvez inclure un base
élément dans la head
section de votre document HTML (bien que cela ne soit pas sans mise en garde [* 2] ). Cela fait référence à l'URL absolue à laquelle toutes les URL relatives sont relatives . En d'autres termes, puisque vous vous attendez à ce que ces URL relatives soient relatives à la racine du document, ajoutez ce qui suit à la head
section:
<base href="http://example.com/">
Maintenant, une URL relative telle que styles.css
référencée dans un document à l'URL /watch/15
demandera http://example.com/styles.css
, non http://example.com/watch/styles.css
.
[* 2] Il existe cependant quelques mises en garde concernant l'utilisation de l'base
élément. Une préoccupation majeure est que tout parent URL qui est destiné à cibler le courant document cible maintenant l'URL de baseplace. Cela peut affecter les ancres sur la page comme leshref="#top"
URL du formulaire,href="?sortby=date"
etc. Et aussi lesform
éléments qui se soumettent à eux-mêmes en utilisant unaction
attributvide(par exemple<form action="" ...
). Ces URL relatives qui ciblent le document actuel devront être modifiées pour inclure l'URL complète de la page en cours (ce qui peut déjouer le point d'utiliser labase
balise comme solution de contournement pour commencer).
Référence: