Das Nichtfinden Ihrer JavaScript- und CSS-Dateien ist ein clientseitiges / Browser-Problem im Zusammenhang mit Ihrem URL-Pfad. Es sollte nicht behoben werden .htaccess
(zumindest nicht in diesem Fall) - obwohl dies daran liegt, dass Sie dies ändern URL-Pfad (in .htaccess
), in dem dieses Problem auftritt.
Wie @closetnoc in Kommentaren vorgeschlagen hat, wird dieses Problem durch die Verwendung relativer URLs in Ihrem HTML verursacht. Relativ zu was? Denken Sie daran, dass es der Benutzeragent / Browser ist, der relative URLs in Ihrem HTML auflöst, nicht der Server. Sie müssen also Ihre URLs korrigieren. nicht .htaccess
.
Wenn Sie beispielsweise auf Ihre CSS-Datei mit einer relativen URL des Formulars verweisen href="styles.css"
(Hinweis, kein Schrägstrichpräfix) und sich derzeit an der URL befinden, löst example.com/view.php?id=15
der Browser Ihre CSS-URL und -Anforderung natürlich auf example.com/styles.css
(im Dokumentstamm). Wenn Sie sich jedoch derzeit an der URL befinden example.com/watch/15
(effektiv in einem /watch
"Unterverzeichnis" [* 1] ), löst der Browser Ihre relative CSS-URL relativ zu einem /watch
Unterverzeichnis und nicht zum Dokumentstamm auf, sodass Sie ein absolutes / aufgelöstes Ergebnis erhalten URL des Formulars example.com/watch/styles.css
.
( [* 1] Beachten Sie, dass "Unterverzeichnis" in diesem Zusammenhang nicht unbedingt ein physisches Unterverzeichnis auf Ihrem Server ist - es ist ein "Unterverzeichnis" im URL-Pfad; ein zusätzliches Pfadsegment. Der Browser kennt den Unterschied jedoch nicht. )
Gleiches gilt, wenn Sie relative URLs in Ihren benutzerdefinierten Fehlerdokumenten verwenden (definiert mit der ErrorDocument
Direktive auf Apache). Das benutzerdefinierte Fehlerdokument kann möglicherweise für jede URL aufgerufen werden, sodass jede relative URL zu einer statischen Ressource (CSS, Bild, JS usw.) relativ zur URL ist, die den Fehler verursacht hat, und nicht relativ zum Fehlerdokument selbst (dessen Standort dem Benutzeragenten effektiv verborgen bleibt).
Wenn Sie Ihre JavaScript- und CSS-URLs so ändern, dass sie root-relativ (beginnend mit einem Schrägstrich) oder sogar absolut sind, tritt dieses Problem nicht auf. Dies wäre die bevorzugte Methode. Alternativ können Sie das base
Element ...
base
Tag / Element
Alternativ können Sie ein base
Element in den head
Abschnitt Ihres HTML-Dokuments aufnehmen (obwohl dies nicht ohne Einschränkungen ist [* 2] ). Dies verweist auf die absolute URL, zu der alle relativen URLs relativ sind. Mit anderen Worten, da Sie erwarten, dass diese relativen URLs relativ zum Dokumentstamm sind, fügen Sie dem head
Abschnitt Folgendes hinzu :
<base href="http://example.com/">
Jetzt wird eine relative URL, wie sie styles.css
in einem Dokument unter URL angegeben /watch/15
ist http://example.com/styles.css
, nicht mehr angefordert http://example.com/watch/styles.css
.
[* 2] Es gibt jedoch einige Einschränkungen bei der Verwendung desbase
Elements. Ein Hauptanliegen ist, dass jede relative URL, die auf das aktuelle Dokument abzielensoll,jetzt stattdessen auf die Basis-URL abzielt. Dies kann sich auf In-Page-Anker wiehref="#top"
und URLs des Formularshref="?sortby=date"
usw.auswirken. Und auch aufform
Elemente, die sich mit einem leerenaction
Attribut (z. B.<form action="" ...
)an sich selbst senden. Diese relativen URLs, die auf das aktuelle Dokument abzielen, müssen so geändert werden, dass sie die vollständige URL der aktuellen Seite enthalten (was möglicherweise den Sinn der Verwendung desbase
Tags als Problemumgehung zunichte macht).
Referenz: