Frage

Ich entwickle eine PHP-Website, die URL-Routing verwendet. Ich würde die Seite gefällt Verzeichnis, unabhängig zu sein, so dass es von http://site.example.com/ bewegt werden konnte http://example.com/site/ ohne jeden Pfad in der HTML zu ändern . Das Problem kommt, wenn ich Dateien bin Verknüpfung, dem Routing unterliegt, wie CSS-Dateien, Bilder und so weiter.

Zum Beispiel, nehmen wir an, dass die Sicht 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 , wird der Browser fordern Sie das Bild als http://site.example.com/img/banner.jpg , das ist völlig in Ordnung. Aber wenn die Seite mit der URL angefordert http://site.example.com/welcome/index, wird denken, der Browser, dass welcome ein Verzeichnis ist und wird versuchen, das Bild als http zu holen: //site.example.com/welcome/img/banner.jpg , was offensichtlich falsch ist.

habe ich bereits einige Optionen in Betracht gezogen, aber sie scheinen alle unvollkommen zu mir:

  • Mit URL-Rewriting zur Umleitung von Anforderungen ( * CSS |. * js |. ...) oder ( css / * | js / * | ...) auf den richtigen Weg.

    Probleme : Jede Erweiterung würde in den Rewrite-Regeln zu benennen. Wenn jemand einen neuen Dateityp (beispielsweise eine MP3-Datei) hinzufügen würde, wäre es nicht neu geschrieben werden.

  • Prepend des Basispfad auf jeden relativen Pfad mit einer PHP-Funktion. Zum Beispiel:
    <img src="<?php echo url::base(); ?>img/banner.jpg" />

    Probleme : Sieht aus chaotisch; CSS -. Und js -Dateien Pfade enthalten, von PHP verarbeitet werden müssten

So, wie halten Sie ein Website-Verzeichnis unabhängig? Gibt es eine bessere / sauberere Möglichkeit als die, die ich kam mit?

War es hilfreich?

Lösung

Sie in den Kopf setzen könnte

<base href="<?php echo url::base(); ?>" /> 

Dies bedeutet, der Browser relativ jegliche nicht-absolute URLs anfordert auf diesen Pfad. Jedoch bin ich nicht sicher, wie diese URLs in CSS-Dateien usw. eingebettet beeinflussen würde. Dies hat keine Auswirkungen auf Pfade in CSS-Dateien definiert. (Dank mooware)

Andere Tipps

Die <base> Sache funktioniert, aber Sie müssen bedenken, es Ihre <a> Tags beeinflussen geht. Betrachten Sie folgendes Beispiel:.

<!-- this page is http://oursite.com/index.html -->
<html>
 <head>
    <base href="http://static.oursite.com/" />
 </head>
 <body>
    <img src="logo.gif" alt="this is http://static.oursite.com/logo.gif" />
    <a href="/login">this links to http://static.oursite.com/login which is not what we wanted.  we wanted http://oursite.com/login</a>
 </body>
</html>

Wenn Sie einen PHP-Funktion-Aufruf für Ihre Links erstellen, das wird kein Problem sein, wie Sie nur sicher, dass es absolute URL spuckt machen können. Aber wenn Sie (oder Ihre Designer) Hand-Code der <a> Tags dann bist du mit dem gleichen Problem wieder stecken, gerade jetzt mit <a> statt <img>.

EDIT: Ich sollte den obigen Absatz hinzufügen, wird vorausgesetzt, Sie Bilder von einem anderen Hostnamen dienen, wie wir es tun. Wenn Sie dies nicht tun, dann offensichtlich, dass das kein Problem sein wird.

tomhaigh hat einen guten Punkt, und würde sich lohnen, es weiter zu untersuchen.

Nach MSDN , die < a href = "http://msdn.microsoft.com/en-au/library/ms535191(VS.85).aspx" rel = "nofollow noreferrer"> base Tag für alle externen Quellen arbeitet, einschließlich Stil Blätter, Bilder, etc.

Vielleicht bin ich etwas fehlt, kann aber nicht einfach tun, was ich (und ich dachte, alle anderen) zu tun / es? Nämlich alle setzen Sie Ihre Bilder, CSS, JavaScripts, etc. in einem gemeinsamen Verzeichnis heißt:.

/inc/images/
/inc/css/
/inc/javascript/
etc

Und dann verweisen sie mit basen relative URLs, das heißt:.

<img src="/inc/images/foo.jpg" />
etc

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top