Sven Rautenberg: kann Alias-Pfade verlinken, aber ohne opendir??!?

Beitrag lesen

Moin!

Vielen Dank!

Eure Antworten haben mich auf neue Ideen gebracht. Werde mir besonders diese mod_rewrite-Geschichte genauer ansehen.

Der entsprechende Teil meiner conf lautet:

DocumentRoot "F:/Netzwerkwelt/online"
Alias /wasnoch "G:/Docs/"
Alias /manuals "G:/Handbuecher/"

Das erklärt es dann doch alles.

Dein Hauptverzeichnis ist "F:/Netzwerkwelt/online". Wenn jemand http://localhost/index.html" anfordert, wird die Datei "F:/Netzwerkwelt/online/index.html" ausgeliefert.

Aufgrund der Alias-Definitionen wird aber _nicht_ "F:/Netzwerkwelt/online/wasnoch/index.html" ausgeliefert, wenn "http://localhost/wasnoch/index.html" angefordert wird, sondern "G:/Docs/index.html". Entsprechendes gilt für URLs mit "/manuals".

Es gibt hier also einen Bruch zwischen Dateisystem und URL-System, der im Prinzip absolut OK ist und niemanden stört...

Die Errormessage lautet:

Warning: opendir(../manuals): failed to open dir: Invalid argument in F:\Netzwerkwelt\online\HTML\dirlist.inc.php on line 2

...außer du versuchst mit einem Skript auf das Dateisystem so zuzugreifen, wie das URL-System dir vorspiegelt.

In diesem Fall willst du das Verzeichnis "../manuals" öffnen. Das ist eine relative Adressierung, also erst "eine Ebene nach oben, und dann das Verzeichnis "manuals". Ausgehend von dem Ablageort des Skriptes in "F:/Netzwerkwelt/online/HTML/dirlist.inc.php" ergibt sich daraus der Versuch, das Verzeichnis "F:/Netzwerkwelt/online/manuals/" zu öffnen.

Das aber existiert nicht, weil die URLs mit "/manuals" ja auf Laufwerk G liegen.

Du mußt deinem Skript also beibringen, dass es bei gewissen URL-Bestandteilen die Alias-Definitionen berücksichtigen muß, und ganz andere Verzeichnisse zu öffnen hat.

Vielleicht kann ich ja dieses Problem mit mod_rewrite lösen... Werde mich dahinter klemmen.

Nicht wirklich. mod_rewrite setzt URLs in andere URLs um. Das Ergebnis eines solchen Vorgangs ist immer noch irgendeine URL, aber keine Position im Dateisystem. Dies wird erst später umgesetzt, und darauf hast du mit mod_rewrite keinen Einfluß.

Du müßtest im Dateisystem ansetzen. Es wäre beispielsweise unter Linux kein Problem, anstelle der Alias-Direktiven einen symbolischen Link zu setzen. Dadurch würde man auf das Verzeichnis "/Docs" unter dem Namen "/manuals" an der richtigen Stelle im Dateisystem verweisen, und alle Dateioperationen (auch das Öffnen eines Verzeichnisses) würden problemlos funktionieren. Leider hast du Windows, und damit geht das nach meinem Wissensstand nicht wirklich.

Die zweiteinfachste Lösung ist wirklich, in deinem Skript zu prüfen, ob ein Verzeichnis mit der URL "/manuals" oder "/wasnoch" geöffnet werden soll, um dann die richtigen Verzeichnisse auf dem anderen Laufwerk anzusprechen.

Die einfachste Lösung wäre, die Inhalte dieser anderen Verzeichnisse auf Laufwerk F in die passenden Unterverzeichnisse zu verschieben.

- Sven Rautenberg