Ich entwickle eine PHP-Website, die URL-Routing verwendet. Ich möchte, dass die Site verzeichnisunabhängig ist, sodass sie von Ссылка nach Ссылка , ohne jeden Pfad im HTML ändern zu müssen. Das Problem tritt auf, wenn ich auf Dateien verlinke, die nicht dem Routing unterliegen, wie CSS-Dateien, Bilder und so weiter.
Nehmen wir an, dass die Ansicht für die Aktion index
des Controllers welcome
das Bild img/banner.jpg
enthält. Wenn die Seite mit der URL Ссылка angefordert wird, fordert der Browser das Bild als Ссылка , was völlig in Ordnung ist. Aber wenn die Seite mit der URL Ссылка aufgerufen wird, wird der Browser denken, dass welcome
ein Verzeichnis ist und versuchen wird hole das Bild als Ссылка , was offensichtlich falsch ist.
Ich habe bereits einige Optionen erwogen, aber sie scheinen mir alle unvollkommen zu sein:
Verwenden Sie das URL-Rewriting, um Anfragen von ( * .css | *. js | ...) oder ( css / * |) umzuleiten js / * | ...) auf den richtigen Pfad.
Probleme : Jede Erweiterung müsste in den Umschreibungsregeln benannt werden. Wenn jemand einen neuen Dateityp (z. B. eine MP3-Datei) hinzufügen würde, würde er nicht neu geschrieben werden.
Den Basispfad zu jedem relativen Pfad mit einer PHP-Funktion voranstellen. Zum Beispiel:
<img src="<?php echo url::base(); ?>img/banner.jpg" />
Probleme : Sieht unordentlich aus; css - und js -Dateien, die Pfade enthalten, müssten von PHP verarbeitet werden.
Also, wie halten Sie ein Website-Verzeichnis unabhängig? Gibt es einen besseren / saubereren Weg als die, auf die ich gekommen bin?
Du könntest den Kopf hineinlegen
%Vor% Dies bedeutet, dass der Browser alle nicht-absoluten URLs zu diesem Pfad anfordert. Ich bin mir jedoch nicht sicher, wie dies sich auf URLs auswirken würde, die in CSS-Dateien eingebettet sind. Dies wirkt sich nicht auf Pfade aus, die in CSS-Dateien definiert sind. (Danke, mooware)
Das <base>
Ding funktioniert, aber Sie müssen daran denken, dass es auch Ihre <a>
Tags beeinflusst. Betrachten Sie dieses Beispiel.:
Wenn Sie einen PHP-Funktionsaufruf zum Erstellen Ihrer Links verwenden, ist das kein Problem, da Sie einfach sicherstellen können, dass die absolute URL ausgegeben wird. Aber wenn Sie (oder Ihre Designer) die <a>
-Tags manuell codieren, dann stecken Sie wieder bei demselben Problem, nur jetzt mit <a>
anstelle von <img>
.
BEARBEITEN: Ich sollte hinzufügen, der obige Absatz geht davon aus, dass Sie Bilder von einem anderen Host-Namen liefern, wie wir es tun. Wenn du das nicht tust, wird das natürlich kein Problem sein.
Tags und Links php url-routing