Grünschnabel: Notation /

Hallo,
leider weiß ich nicht, wohin das Thema gehört.
In SELFHTML habe ich die Erläuterungen zu gefunden
./
farben.htm
./farben.htm
bilder/grafik.gif
./bilder/grafik.gif
../
../../../../woanders/datei.htm

Ich sehe aber oft auch die Angabe
/irgenwas

also / ohne vorangehendem .

Was bedeutet dies?

  1. Was bedeutet dies?

    Das es sich um das Root (Haupt-) Verzeichnis handelt.

    1. Was bedeutet dies?
      Das es sich um das Root (Haupt-) Verzeichnis handelt.

      Und wieso klappt dann das?
      Verzeichniss:

      root
       a
       b
       c
         c1
            images
       d
       e
       f
      Wenn ich in einer Datei im Verzeichniss c1 eine Pfadangabe zu
      einem Bild in images mache <img src="./images/bild1.jpg"....

      c1 befindet sich nicht im Root, sondern im
      Verzeichniss c, klappt aber trotzdem.

      1. Wenn ich in einer Datei im Verzeichniss c1 eine Pfadangabe zu
        einem Bild in images mache <img src="./images/bild1.jpg"....

        c1 befindet sich nicht im Root, sondern im
        Verzeichniss c, klappt aber trotzdem.

        Natürlich geht das denn ./ steht für das aktuelle Verzeichnis.
        Du kannst da das ./ weg lassen.

        Sinnvoll ist es meiner Meinung nur wenn du von sagen wir mal /a/datei3.html auf /a/ verweisen möchtest.

        Gruß,
        Rekire

        1. Natürlich geht das denn ./ steht für das aktuelle Verzeichnis.

          Genau, und  nicht unbedingt immer "root" wie
          man deine letzte Antwort hätte deuten können.

          Sinnvoll ist es meiner Meinung nur wenn du von sagen wir mal /a/datei3.html auf /a/ verweisen möchtest.

          Sehe ich auch so, allerdings stellt sich dann wieder genau die eigentliche Frage "Wo ist der Unterschied zwischen ./ und /",
          wenn doch beides gleich funktioniert?

          Ich frage mich das auch schon lange, aber nie hier gefragt um
          nicht blöd dazustehen. Ein Grund den ich mit Vielen teile,
          warum auch gerade einfache Fragen oft nie beantwortet werden,
          weil sie keiner stellen will. ;-)

          Jack

          1. Hallo Jack,

            Sehe ich auch so, allerdings stellt sich dann wieder genau die eigentliche Frage "Wo ist der Unterschied zwischen ./ und /", wenn doch beides gleich funktioniert?

            nein, es funktioniert eben _nicht_ gleich. Die Pfadangabe "./" geht vom aktuellen Verzeichnis (Punkt) aus und sucht von da aus weiter, die Pfadangabe "/" ohne Punkt geht gleich vom Root-Verzeichnis aus. Das ist ein ganz wesentlicher Unterschied. Im ersten Fall ist die Angabe relativ zum aktuellen Verzeichnis, im zweiten Fall absolut vom Root des Filesystems (oder HTTP-Root).

            Dasselbe gilt auch im Windows-Dateisystem. Wenn du dich in einem beliebigen Verzeichnis befindest, in dem eine Datei notepad.exe liegt, kannst du die entweder ganz ohne Pfadangabe "notepad.exe" aufrufen, oder explizit im aktuellen Verzeichnis mit ".\notepad.exe", oder du kannst die Kopie aus dem Windows-Verzeichnis ansprechen, indem du sie absolut "\Windows\notepad.exe" adressierst.

            Jetzt etwas klarer?

            Ciao,
             Martin

            --
            F: Was ist schneller: Das Licht oder der Schall?
            A: Offensichtlich der Schall. Wenn man den Fernseher einschaltet, kommt immer erst der Ton, und dann erst das Bild.
            1. Jetzt etwas klarer?

              Ja, danke Martin

            2. hallo,

              Dasselbe gilt auch im Windows-Dateisystem. Wenn du dich in einem beliebigen Verzeichnis befindest, in dem eine Datei notepad.exe liegt, kannst du die entweder ganz ohne Pfadangabe "notepad.exe" aufrufen, oder explizit im aktuellen Verzeichnis mit ".\notepad.exe", oder du kannst die Kopie aus dem Windows-Verzeichnis ansprechen, indem du sie absolut "\Windows\notepad.exe" adressierst.

              Interessanter Hinweis. Allerdings sieht sich in Windows kaum noch jemand veranlaßt, von der Konsole (Eingabeaufforderung) aus eine ausführbare Datei aufzurufen, und egal, welchen Pfad du verwendest: es wird immer funktionieren. Unter Linux ist das anders. Du kannst in einem Verzeichnis ja durchaus ausführbare Dateien haben, die als Shellscripts oder als binaries vorliegen. Wenn das Verzeichnis, in dem du dich befindest, im (System-)Pfad liegt, kannst du ausführbare Scripts durch den Aufruf ihres Namens auch vom Interpreter ausführen lassen; liegt das Verzeichnis aber nicht im Pfad, geht es eben nicht unmittelbar.
              Beispiel: du willst dir einen Apache kompilieren und brauchst dazu das Shellscript "configure". Das Installationspaket hast du in "/misc/install" ausgepackt - und dieses Verzeichnis liegt nicht im Systempfad. Du willst deinen Apache selber kompilieren, weil du beispielsweise ein paar Module für überflüssig hältst oder die Konfigurationsdatei "martin" nennen willst. Dazu brauchst du das configure-Script, das in deinem Installationsverzeichnis liegt. Es ist ein Shellscript. Wenn du jetzt aber auf deiner Konsole einfach bloß "configure" aufrufst, passiert gar nichts (es sei denn, du schummelst und gibst explizit "sh configure" an). Wenn du aber "./configure" tippst, gehts plötzlich. Diese Schreibweise ist also dann wichtig, wenn es um ausführbare Dateien geht und der Interpreter angesprochen werden muß. Das hängt damit zusammen, daß mit "./" die bereits für die Konsolenanzeige benutzte Shell verlassen und erneut aufgerufen wird, ohne das Verzeichnis zu wechseln.

              In Verweisen innerhalb von HTML-Dateien sind solche Pfadangaben wie "./seite.htm" daher eigentlich falsch bzw. unnötig.

              Grüße aus Berlin

              Christoph S.

              --
              Visitenkarte
              ss:| zu:) ls:& fo:) va:) sh:| rl:|
      2. Hi Jack.

        Wenn ich in einer Datei im Verzeichniss c1 eine Pfadangabe zu
        einem Bild in images mache <img src="./images/bild1.jpg"....

        c1 befindet sich nicht im Root, sondern im
        Verzeichniss c, klappt aber trotzdem.

        Es gibt einen Unterschied zwischen "." (dieses Verzeichnis) und "/" (Wurzelverzeichnis). Mit "./images/bild1.jpg" sagst du nichts anderes als "die Datei bild1.jpg, die im Verzeichnis images liegt, welches sich im aktuellen Verzeichnis befindet".

        --
        Once is a mistake, twice is jazz.
      3. Hallo,

        [ "/" ] Was bedeutet dies?
        Das es sich um das Root (Haupt-) Verzeichnis handelt.

        richtig.

        <img src="./images/bild1.jpg" ...
        c1 befindet sich nicht im Root, sondern im
        Verzeichniss c, klappt aber trotzdem.

        Ja, weil der Pfad mit einem "." als erstem Verzeichnisnamen beginnt. Der Punkt "." steht für das aktuelle Verzeichnis, zwei Punkte ".." für das übergeordnete Verzeichnis. Mit "/" werden Verzeichnisse getrennt; nur wenn ein "/" als _erstes_ Zeichen im Pfad auftritt, bedeutet es einen Start im Root-verzeichnis.

        So long,
         Martin

        --
        Ich wollt', ich wär ein Teppich. Dann könnte ich morgens liegenbleiben.
  2. Hallo,
    habe die Verzeichnisgeschichte verstanden.
    Jetzt habe ich ein konkretes Problem.
    Habe Apache installiert und in der httpd.conf an den beiden Stellen, wo cgi-bin vorkommt fplgende Änderungen vorgenommen:

    # ScriptAlias /cgi-bin/ "C:/XAMPP/cgi-bin/"         <====== alt
        ScriptAlias /cgi-bin/ "C:/XAMPP/htdocs/cgi-bin/"

    </IfModule>

    "C:/XAMPP/cgi-bin" should be changed to whatever your ScriptAliased

    CGI directory exists, if you have that configured.

    <Directory "C:/XAMPP/cgi-bin">                 <====== alt

    <Directory "C:/XAMPP/htdocs/cgi-bin">
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
    </Directory>

    Wenn ich jetzt ein Script in cgi-bin aufrufe, kommt der Fehler:

    [error][client 127.0.0.1]attempt to invoke directoy as script: c:/XAMPP/htdocs/cgi-bin/

    Hoffentlich kann mir jemand weiterhelfen

    1. Hallo,
      habe vergessen: Die Meldung kommt in der log-Datei, am Bildschirm kommt
      Zugriff verweigert!
      .....
      Error 403

      1. Hallo,
        wenn ich das Verzeichnis xcgi-bin nenne, dann funktioniert es.
        Aber ich möchte natürlich nicht einen anderen Namen verwenden, schon wegen der Übertragbarkeit ins Internet!
        Hilfe!

    2. hi,

      Wesshalb willst du denn das Verzeichnis derartig verschieben?
      In der Srt wie du es jetzt verwendest wird es normalerweise nicht gehandbabt.
      Ich vermutet das es dem Apache nicht passt das du ein virtuelles Verzeichnis erstellst was deckungsgleich mit dem eigentlichem Verzeichnis ist.
      Aus dem Grund würde ich auch wenn es nicht Empfehlenswert ist das htdocs verzeichnis mit cgi rechten ausstatten.
      Eine andere möglichkeit wäre htaccess aber da kenne ich mich nicht so gut mit aus.

      Ich hoffe das ich helfen konnte.

      Gruß,
      Rekire

      1. Wesshalb willst du denn das Verzeichnis derartig verschieben?
        In der Srt wie du es jetzt verwendest wird es normalerweise nicht gehandbabt.

        Damit es im root-Verzeichnis steht wie bei meinem Provider.
        Und in der conf-Datei kann man es ja wohl auch so angeben - wenn man es richtig macht?

        1. Wesshalb willst du denn das Verzeichnis derartig verschieben?
          In der Srt wie du es jetzt verwendest wird es normalerweise nicht gehandbabt.
          Damit es im root-Verzeichnis steht wie bei meinem Provider.
          Und in der conf-Datei kann man es ja wohl auch so angeben - wenn man es richtig macht?

          Aber wie macht man es richtig?

    3. hallo,

      Wenn ich jetzt ein Script in cgi-bin aufrufe, kommt der Fehler:
      [error][client 127.0.0.1]attempt to invoke directoy as script: c:/XAMPP/htdocs/cgi-bin/

      Du hast kein Script aufgerufen, sondern das cgi-bin-Verzeichnis direkt eingegeben. In diesem Verzeichnis liegen ausführbare Dateien, es gibt dort also kein "Standarddokument" wie in anderen Verzeichnissen - etwa eine "index.htm". Der Server behandelt alle Anfragen, die Scripts in diesem Verzeichnis gelten, so, daß er den Perl-Interpreter aktiviert. Wenn du nun nur das Verzeichnis angibst, weiß der Webserver nicht, was er tun soll und quittiert das mit dieser Fehlermeldung. Du mußt grundsätzlich den exakten Namen deines cgi-Scripts angeben.

      Grüße aus Berlin

      Christoph S.

      --
      Visitenkarte
      ss:| zu:) ls:& fo:) va:) sh:| rl:|