Ich entwickle eine PHP-Website, die URL-Routing verwendet. Ich möchte, dass die Site verzeichnisunabhängig ist, so dass sie von http://site.example.com/ zu http://example.com/site/ verschoben werden kann, 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.Wie Sie eine Website mit URL-Routing-Verzeichnis unabhängig halten
Nehmen wir zum Beispiel 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 http://site.example.com/welcome angefordert wird, fordert der Browser das Bild als http://site.example.com/img/banner.jpg an, was völlig in Ordnung ist. Aber wenn die Seite mit der URL http://site.example.com/welcome/index angefordert wird, wird der Browser denken, dass welcome
ein Verzeichnis ist und versuchen wird, das Bild als http://site.example.com/welcome/img/banner.jpg zu holen, was offensichtlich falsch ist.
Ich habe bereits einige Optionen in Betracht gezogen, aber sie scheinen alle unvollkommen zu mir:
Verwenden URL-Rewriting zur Umleitung von Anforderungen (* .css | * .js | ...) oder (css/* | js/* | ...) auf den richtigen Pfad.
Probleme: Jede Erweiterung müsste in den Rewrite-Regeln 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 aus chaotisch; 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, die mir einfallen?
Gemäß der CSS-Spezifikation werden URLs in CSS-Dateien relativ zum Pfad der Datei aufgelöst, in der sie definiert sind. Daher beeinflusst das Basis-Tag sie überhaupt nicht. Ich habe es versucht und es funktioniert wirklich so. – mooware