So halten Sie eine Website mit URL-Routing-Verzeichnis unabhängig

8

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?

    
mooware 09.11.2008, 20:30
quelle

4 Antworten

8

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)

    
Tom Haigh 09.11.2008, 20:32
quelle
2

Das <base> Ding funktioniert, aber Sie müssen daran denken, dass es auch Ihre <a> Tags beeinflusst. Betrachten Sie dieses Beispiel.:

%Vor%

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.

    
someguy 10.11.2008 13:37
quelle
1

tomhaigh hat einen guten Punkt, und es wäre lohnenswert, es weiter zu untersuchen.

Nach MSDN lautet die base -Tag funktioniert für alle externen Quellen, einschließlich Stylesheets, Bildern usw.

    
Anton Babushkin 09.11.2008 21:31
quelle
1

Vielleicht vermisse ich etwas, aber kannst du nicht einfach tun, was ich (und ich dachte, alle anderen) tun? Nämlich alle Ihre Bilder, CSS, Javascripts usw. in ein gemeinsames Verzeichnis, zB:

%Vor%

Und referenzieren Sie sie dann mit base-relativen URLs, also:

%Vor%

?

    
da5id 09.11.2008 22:30
quelle

Tags und Links