Non riuscire a trovare i tuoi file JavaScript e CSS è un problema lato client / browser relativo al tuo percorso URL, non è qualcosa che dovrebbe essere risolto .htaccess
(almeno non in questo caso) - anche se è perché lo stai cambiando Percorso URL (in .htaccess
) in cui si verifica questo problema.
Come suggerito da @closetnoc nei commenti, questo problema è causato dall'utilizzo di URL relativi nel tuo HTML. Rispetto a cosa? Ricorda, è l'utente-agente / browser che risolve gli URL relativi nel tuo HTML, non il server. Quindi, devi correggere i tuoi URL; no .htaccess
.
Ad esempio, se stai facendo riferimento al tuo file CSS con un URL relativo del modulo href="styles.css"
(nota, senza prefisso barra) e sei attualmente nell'URL, example.com/view.php?id=15
il browser risolverà naturalmente l'URL CSS e la richiesta example.com/styles.css
(nella radice del documento). Tuttavia, se siete attualmente presso l'URL example.com/watch/15
(in modo efficace in una /watch
"sottodirectory" [* 1] ), il navigatore risolverà il relativo URL CSS relativo a una /watch
sottodirectory, piuttosto che la radice del documento, così si finisce con un assoluto / risolto URL del modulo example.com/watch/styles.css
.
( [* 1] Nota che "sottodirectory" in questo contesto non è necessariamente una sottodirectory fisica sul tuo server - è una "sottodirectory" nel percorso URL; un segmento di percorso aggiuntivo. Ma il browser non conosce la differenza. )
Lo stesso vale se si utilizzano URL relativi nei documenti di errore personalizzati (definiti con la ErrorDocument
direttiva su Apache). Il documento di errore personalizzato può potenzialmente essere chiamato su qualsiasi URL, quindi qualsiasi URL relativo a una risorsa statica (CSS, immagine, JS, ecc.) Sarà relativo all'URL che ha causato l'errore, non relativo al documento di errore stesso (la cui posizione è effettivamente nascosta all'utente-agente).
Se hai modificato gli URL JavaScript e CSS in modo che siano relativi alla radice (a partire da una barra) o addirittura assoluti, non otterrai questo problema. Questo sarebbe il metodo preferito. In alternativa, puoi utilizzare l' base
elemento ...
base
tag / elemento
In alternativa puoi includere un base
elemento nella head
sezione del tuo documento HTML (anche se questo non è privo di avvertimenti [* 2] ). Questo fa riferimento all'URL assoluto a cui sono relativi tutti gli URL relativi . In altre parole, poiché ti aspetti che questi URL relativi siano relativi alla radice del documento, aggiungi alla head
sezione quanto segue :
<base href="http://example.com/">
Ora, un URL relativo, come styles.css
riferimento in un documento URL /watch/15
richiederà http://example.com/styles.css
, non http://example.com/watch/styles.css
.
[* 2] Vi sono, tuttavia, alcuni avvertimenti sull'usobase
dell'elemento. Una delle preoccupazioni principali è che qualsiasiURL relativo destinato aldocumento corrente verrà ora indirizzato all'URL di base. Questo può influire su ancore in-page comehref="#top"
e URL del modulohref="?sortby=date"
ecc. E ancheform
elementi che si inviano a se stessi utilizzando unaction
attributovuoto(ad es.<form action="" ...
). Questi URL relativi che hanno come target il documento corrente dovranno essere modificati per includere l'URL completo della pagina corrente (che potrebbe vanificare il punto di usare ilbase
tag come soluzione alternativa per cominciare).
Riferimento: