Seite 1 von 1

Pfadkonfiguration

Verfasst: 03.12.2007 22:30
von sommer
Hallo,
ich suche eine Möglichkeit bei der Erstellung einer Internetseite die http Adresse im Quellcode wegzulassen, die Seite soll Lokal, wie im Netz problemlos laufen.
Was gibt es da für Möglichkeiten? Wie wurde das z.B. hier im Forum gelöst?

Verfasst: 03.12.2007 23:16
von gn#36
Das ist eigentlich recht einfach: Du musst auf jeder Seite den Pfad zu den anderen Seiten relativ zur aktuellen Position angeben. Hierbei kannst du dich mit einem . (Punkt) als Platzhalter auf das aktuelle Verzeichnis beziehen, zwei Punkte (..) bezieht sich auf den Übergeordneten Ordner.

Beispiel:

Sagen wir, du befindest dich gerade im Pfad http://localhost/phpBB2/admin/
Möchtest du jetzt auf eine Datei, die sich im Ordner http://localhost/phpBB2/admin/ befindet (also im gleichen Ordner) dann kannst du die Pfadangabe ./datei.html verwenden. Möchtest du dagegen auf eine Datei im Verzeichnis http://localhost/phpBB2/ verlinken musst du als Pfadangabe ../datei.html wählen. Das geht natürlich auch noch weiter, wenn du dich auf http://localhost/ beziehen willst, dann geht das mit ../../datei.html wenn du in den Ordner http://localhost/karl_heinz/ willst, dann geht das mit ../../karl_heinz/datei.html usw.

Eine andere Alternative wäre die zentrale Speicherung der Information wie die Pfade zu wählen sind. Das geht aber nur mit einer Skriptsprache (wie z.b. PHP) und muss dann bei jedem Verschieben der Dateien auf den aktuellen Stand gebracht werden, hat also eigentlich nur Nachteile. Eigentlich verwendet man inzwischen so ziemlich überall relative Pfade innerhalb einer Seite.

Verfasst: 04.12.2007 10:47
von sommer
Das ist mir soweit bekannt, aber trotzdem danke für die genaue Erklärung.

Mit der Lösung habe ich das Problem, wenn z.B. eine Navigation auf allen Seiten eingebunden wird und man sich in einem Verzeichnis befindet.
Auf der index Seite stimmen die Links noch index.php blabla.php usw.
Wenn man sich dann aber in einem Verzeichnis befindet http://www.domain.com/verzeichnis/ und da dann auf die Navi klickt, kommt man nicht mehr aus dem Verzeichnis raus.

Wie könnte man das denn mit den Pfaden lösen?

Ist ein wenig verzwickt, da ich bei der Erstellung eigentlich gleich die Links setzen will um nicht erst am Ende alles durchzugehen, da vergisst man leicht etwas. Es ist auch noch nicht alles klar, was da noch kommen wird.
Bei einer Erweiterung mit zusätzlichen Verzeichnissen wäre wieder eine Änderung fällig.

Verfasst: 04.12.2007 13:06
von gn#36
Das machst du am besten, wenn du in jeder Datei eine Variable hast, die von der aktuellen Position auf das Root Verzeichnis zeigt. Diese Variable fügst du dann vor allen Links ein und erhältst die relative Position zur aktuellen.

Bsp:
Im Verzeichnis http://localhost/phpBB2/admin/ enthält $phpbb_root_path ../
Alle Includes und Links werden z.b. in der common.php auf den Forum Root bezogen, aber vorne dran hängt $phpbb_root_path, z.b. so:

Code: Alles auswählen

include($phpbb_root_path . 'includes/functions.php'); //Eigentlich wird das .php auch noch durch eine Variable ersetzt, das ist aber hier unwichtig
Wird die Datei jetzt vom Adminordner aus eingebunden, dann enthält $phpbb_root_path ../, also bezieht sich die Position - relativ zur aktuellen Position im Adminordner - auf ein übergeordnetes Verzeichnis. Wird die Datei dagegen von der index.php im Forum-Root eingebunden enthält die Variable ./ und der Pfad bezieht sich direkt auf das aktuelle Verzeichnis.

So kannst du das - eine Skriptsprache vorausgesetzt - auch bei deinem Menü machen. Definiere dir einfach in jeder Datei eine Variable die sich auf eine feste Position in deiner Seitenstruktur bezieht (typischerweise das Root Verzeichnis, da sonst alle Pfade unnötig viele ../ enthalten) und frage diese Variable ab. Hierbei musst du allerdings sicherstellen, dass die Variable auch tatsächlich in jeder von außen zugänglichen Datei gesetzt wird, ansonsten könntest du - wenn register globals eingeschaltet ist - deinen Server für Hacker öffnen. Ich persönlich verwende hierfür auch keine Variable sondern eine Konstante (die sich nicht direkt über die URL setzen lässt, selbst wenn register_globals aktiv ist), außerdem gibts eine Fehlermeldung wenn ich die Konstante mal aus Versehen doppelt setzen möchte. In allen nur eingebundenen Dateien landet dann die Abfrage

Code: Alles auswählen

if(!defined('KONSTANTE'))
{
die('Hacking Attempt!');
}
ganz am Anfang, hierdurch lassen sich diese Dateien nur verwenden, wenn die Konstante auch tatsächlich gesetzt ist.

Verfasst: 04.12.2007 14:44
von sommer
Super Lösung! Vielen Dank!!
Lässt sich wirklich leicht umsetzten und funktioniert! 8)