Linda: Dateinamen in URL fehlt. Wozu und wie?

Hallo Forumer,

ich habe eine theoretische Frage, konnte in Google nichts dazu finden, das mir passende Suchbegriffe fehlen :).

Wenn ich mit Klick auf einen Link eine neue Datei aufmache, dann steht bei mir der Dateiname in URL: http://mydomain.com/new_user.php

Ich habe aber schon mehrmals die Seiten gesehen, wo die Links nicht auf einen Dateinamen, sondern scheinbar auf ein Verzeichnis zeigen. In meinem Beispiel wäre dies: http://mydomain.com/new_user

Ich kann mir nicht vorstellen, dass es da für jede Datei ein Verzeichnis erstellt worden ist. Also wird da eher irgendein Skript sitzen, dass den Pfad entgegennimmt, diesen Untersucht, und dann den passenden Skript aufruft und $_POST Array an diesen übergibt. Richtig?

Die zweite Frage: hat es etwas mit Sicherheit der Seite zu tun? Sollte man so etwas machen, oder ist es eine Geschmackssache?

Gruß, Linda

--
2 hours of try and error can save 10 minutes of manual reading
  1. Hallo Linda!

    ich habe eine theoretische Frage, konnte in Google nichts dazu
    finden, das mir passende Suchbegriffe fehlen :).

    So theoretisch ist deine Frage nicht. Dir fällt wirklich nur das
    richtige Stichwort.

    Ich habe aber schon mehrmals die Seiten gesehen, wo die Links nicht
    auf einen Dateinamen, sondern scheinbar auf ein Verzeichnis zeigen.
    In meinem Beispiel wäre dies: http://mydomain.com/new_user
    Ich kann mir nicht vorstellen, dass es da für jede Datei ein
    Verzeichnis erstellt worden ist. Also wird da eher irgendein Skript
    sitzen, dass den Pfad entgegennimmt, diesen Untersucht, und dann
    den passenden Skript aufruft und $_POST Array an diesen übergibt.
    Richtig?

    Nein, in den meisten Fällen wird das über das Apache-Module mod_rewrite
    gelöst.

    Die zweite Frage: hat es etwas mit Sicherheit der Seite zu tun?
    Sollte man so etwas machen, oder ist es eine Geschmackssache?

    Du kannst damit natürlich den wirklichen Ort der Datei verstecken
    und dich ggf. besser gegen Injections schützen. Meistens wird das
    aber tatsächlich nur aus "Kosmetik"-gründen verwendet.

    ℆, ℒacℎgas

    --
    Bei der intendierten Realisierung der linguistischen Simplifizierung
    des regionalen Idioms resultiert die Evidenz der Opportunität extrem
    apparent, den elaborierten und quantitativ opulenten Usus nicht assi-
    milierter Xenologien konsequent zu eliminieren!
    1. Hallo Lachgas,

      Nein, in den meisten Fällen wird das über das Apache-Module mod_rewrite
      gelöst.

      Da ich keinen Zugriff auf Apache httpd.conf bei meinem Provider habe, gehe ich davon aus, dass diese Lösung mir nicht zur Verfügung steht.

      Meistens wird das aber tatsächlich nur aus "Kosmetik"-gründen verwendet.

      Sieht wirklich irgendwie besser aus :) Werde im Hinterkopf behalten, wenn es sich mal lohnen wird einen dedizierten Server beim Provider zu mieten.

      Danke und Gruß, Linda

      --
      2 hours of try and error can save 10 minutes of manual reading
      1. Hallo Linda,

        Da ich keinen Zugriff auf Apache httpd.conf bei meinem Provider habe, gehe ich davon aus, dass diese Lösung mir nicht zur Verfügung steht.

        Darfst du .htaccess-Dateien verwenden? Dann geht es vielleicht doch.
        Dazu darf AllowOverride allerdings nicht auf none stehen.

        Gruß
        Alexander Brock

        --
        SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:? ss:| de:> js:( ch:| sh:( mo:} zu:}
        http://againsttcpa.com
        1. Hallo Alexander,

          Darfst du .htaccess-Dateien verwenden? Dann geht es vielleicht doch. Dazu darf AllowOverride allerdings nicht auf none stehen.

          Ja, die .htaccess-Dateien darf ich verwenden. Bis jetzt habe ich nur passwortgeschützte Bereiche damit erstellt bzw. eine Weiterleitung für 404, 401 etc. Fehler. Habe jetzt gerade in phpinfo() nachgeschaut, ob AllowOverride eingeschaltet ist. Nicht gefunden, aber ich gehe davon aus, wenn .htaccess bereits funktioniert, dass ich es darf :)

          Soll ich in .htaccess die Apache-Anweisungen wie in httpd.conf runterschreiben? Sicherlich nicht. Werde mich mal in Google umsehen. Danke für den Hinweis!

          Gruß, Linda

          --
          2 hours of try and error can save 10 minutes of manual reading
          1. hi,

            Habe jetzt gerade in phpinfo() nachgeschaut, ob AllowOverride eingeschaltet ist. Nicht gefunden,

            kannst du da auch nicht, da das eine konfigurationsanweisung des apachen ist, die für PHP weitgehend uninteressant ist.

            aber ich gehe davon aus, wenn .htaccess bereits funktioniert, dass ich es darf :)

            nein, so pauschal kann man das nicht sehen.
            AllowOverride kann man für verschiedene "stufen" konfigurieren - mag sein, dass du bestimmtes darfst, anderes nicht.

            Soll ich in .htaccess die Apache-Anweisungen wie in httpd.conf runterschreiben? Sicherlich nicht.

            doch, was mod_rewrite angeht, sind die anweisungen die gleichen.

            Werde mich mal in Google umsehen. Danke für den Hinweis!

            eine gute anlaufstelle ist der URL Rewriting Guide - allerdings in englisch.
            wenn ich mich recht erinnere, gibt es aber auch irgendwo eine deutsche version davon; oder zumindest gleichwertige seiten.

            gruß,
            wahsaga

            --
            /voodoo.css:
            #GeorgeWBush { position:absolute; bottom:-6ft; }
            1. Hallo wahsaga,

              kannst du da auch nicht, da das eine konfigurationsanweisung des apachen ist, die für PHP weitgehend uninteressant ist.

              ich hatte schon Mal hier gefragt, wie ich an zumindest informativ an die Einstellungen des Apache bei meinem Provider dran komme. Sowas ähnliches wie phpinfo() oder auf der Kommando-Zeile oder... egal wie :) Leider keine Antwort gefunden.

              AllowOverride kann man für verschiedene "stufen" konfigurieren - mag sein, dass du bestimmtes darfst, anderes nicht.

              Das kann ich nur durch try-and-error rausfinden. Was ich im Moment auch mache :)

              doch, was mod_rewrite angeht, sind die anweisungen die gleichen.
              eine gute anlaufstelle ist der URL Rewriting Guide - allerdings in englisch.

              jau, ich hatte schon paar Beispiele gefunden. Aber Guide ist natürlich die Sahne. Englisch stört nicht. Bis jetzt resultieren alle meine Versuche auf dem lokalen Server in 500 Fehler :) Ich hatte da AllowOverride auf All gestellt und teste die Rewrite Direktiven aus.

              Gruß, Linda

              --
              2 hours of try and error can save 10 minutes of manual reading
            2. Hallo wahsaga,

              auf dem lokalen Server funktioniert das hier einwandfrei:

              RewriteEngine On
              RewriteRule ^main/(.*) http://mydomain.com/$1.php

              nein, so pauschal kann man das nicht sehen.
              AllowOverride kann man für verschiedene "stufen" konfigurieren - mag sein, dass du bestimmtes darfst, anderes nicht.

              Allerdings auf dem Server des Providers darf ich .htaccess nicht verändern. Keine Rechte. Die .htacces wird durch Confixx auf dem Server erstellt, wenn ich passwortgeschützte Bereiche anlege, bzw. Fehler-Hanlding hinzufüge, aber eine fertige .httaccess auf den Server laden - no way!

              Es sieht aber soooo schön aus lokal. Vor allem, man sieht gar nicht welche Sprache ich für die Seiten verwende, da dieses verräterische ".php" wegfällt.

              Mda... Muss ich wohl den eigenen Provider hacken, um einen für mich harmlosen htaccess-Zusatz auf den Server zu schleudern. ;)

              Gruß, Linda

              --
              2 hours of try and error can save 10 minutes of manual reading
              1. hi,

                Allerdings auf dem Server des Providers darf ich .htaccess nicht verändern. Keine Rechte. Die .htacces wird durch Confixx auf dem Server erstellt, wenn ich passwortgeschützte Bereiche anlege, bzw. Fehler-Hanlding hinzufüge, aber eine fertige .httaccess auf den Server laden - no way!

                connfixx und .htaccess ist ein thema, welches ich auch "mag".

                es sollte aber eigentlich ausreichen, mit dem FTP-programm die rechte einer ggf. vorhandenen .htaccess-datei so zu ändern, dass auch dein FTP-user sie beschreiben/löschen darf, damit du eine "eigene" hochladen kannst. (wenn schon eine existiert und einträge enthält, empfiehlt es sich natürlich eher, diese einträge zu behalten und zu ergänzen, bevor nachher irgendetwas anderes nicht mehr wie gewünscht funktioniert.)

                um .htaccess-datei überhaupt "sehen" zu können per FTP, muss man idR. erst mal das "list all"-kommande an den FTP-server absetzen.
                in vielen FTP-programmen gibt es dazu eine kleine eingabebox, in die man dann sowas wie -la eintragen und abschicken muss.

                gruß,
                wahsaga

                --
                /voodoo.css:
                #GeorgeWBush { position:absolute; bottom:-6ft; }
                1. Hallo wahsaga,

                  connfixx und .htaccess ist ein thema, welches ich auch "mag".

                  Dann wird Dich sicherlich meine letzte Erkenntnis interessieren. Vorschnelle Urteile sind meine Stärke - stimmen aber nicht immer.

                  Was ich rausgefunden habe:
                  1. Man darf die .htaccess auf dem Server _nicht_ überschreiben.
                  2. Man darf diese aber umbenennen und eine neue hochladen.
                  3. In Zusammenhang mit Confixx existiert aber noch ein Problem hier beschrieben

                  Ich habe den Provider angeschrieben und bin hoffentlich morgen glücklich :)

                  Gruß, Linda

                  --
                  2 hours of try and error can save 10 minutes of manual reading
  2. Man kann einen Server so konfigurieren, dass er automatisch eine index.html/index.htm/index.pl/index.php bzw default.html/default.html... aufruft, wenn ein Verzeichnis aufgerufen wurde. D.h. du landest auf der index.html wenn du ein Verzeichnis aufrufst.
    Schau einmal in die Adressleiste deines Browsers, wenn du dich auf der Forums-Hauptseite von selfHTML befindest. Was fällt dir auf?

    1. Hallo dad!

      Man kann einen Server so konfigurieren, dass er automatisch eine
      index.html/index.htm/index.pl/index.php bzw
      default.html/default.html... aufruft, wenn ein Verzeichnis aufgerufen
      wurde. D.h. du landest auf der index.html wenn du ein Verzeichnis
      aufrufst.

      Genau das kannte sie ja bereits.

      Schau einmal in die Adressleiste deines Browsers, wenn du dich auf
      der Forums-Hauptseite von selfHTML befindest. Was fällt dir auf?

      Es gibt sicherlich keine index.html.

      ℆, ℒacℎgas

      --
      Bei der intendierten Realisierung der linguistischen Simplifizierung
      des regionalen Idioms resultiert die Evidenz der Opportunität extrem
      apparent, den elaborierten und quantitativ opulenten Usus nicht assi-
      milierter Xenologien konsequent zu eliminieren!
      1. Schau einmal in die Adressleiste deines Browsers, wenn du dich auf
        der Forums-Hauptseite von selfHTML befindest. Was fällt dir auf?

        Es gibt sicherlich keine index.html.

        Behaupte ich ja auch gar nicht.

  3. Hi,

    Ich habe aber schon mehrmals die Seiten gesehen, wo die Links nicht auf einen Dateinamen, sondern scheinbar auf ein Verzeichnis zeigen. In meinem Beispiel wäre dies: http://mydomain.com/new_user

    Warum sollte das ein Verzeichnis sein[1]? Dann würde der Pfad doch mit einem '/' enden, oder?
    Die ursprüngliche Methode ein paar Buchstaben mittels '.' hinten anzuhängen war zu Einführungszeiten rein informell und ist es bis auf die Betriebssysteme der Firma Microsoft auch heute noch. "new_user" ist hier ein völlig korrekter Dateiname.
    Der Nachteil solcher Namensgebung ist beim Apachen und einigen anderen Webservern der, das diese Programme die Behandlung einer Datei vom Dateinamen abhängig machen. Somit müßte für jede Datei einzeln in der Konfiguration bestimmt werden, wie der Apache damit umzugehen hat. Da diese Konfiguration aber auch die Nutzung regulärer Ausdrücke erlaubt wird die Methode die Klassifizierung der Dateien durch eine Endung vorzunehmen geradezu aufgedrängt. Das es durch eine Endung geschieht und keine andere Stelle im Dateinamen genommen wird (der Anfang böte sich ja ebenfalls an) ist fast rein traditionell, die technischen Gründe sind dabei nur marginal.

    Der Vorteil von individuellen Dateinamen wäre es, das wirklich und ausschließlich nur diese Dateien vom Apachen behandelt werden. (es wäre noch die eine oder andere Änderung in der Konfiguration des Apachen zusätzlich notwendig, aber ich werde mein Beckmesser für heute mal wieder einstecken ;-)

    so short

    Christoph Zurnieden

    [1] Es muß noch nicht einmal eine Datei sein. Dein Posting hier "http://forum.de.selfhtml.org/?t=106780&m=662288" ist z.B. keine Datei sondern Eingabe für ein Programm, das als Ausgabe einen Stream an den Client sendet. Ohne das irgendwo eine Datei ensteht. Das Posting wird aus einer DB (eine XML-Datei) ausgelesen, zu HTML aufbereitet und versandt.

    1. Hallo Christoph,

      Warum sollte das ein Verzeichnis sein[1]? Dann würde der Pfad doch mit einem '/' enden, oder?

      Nö, muss es nicht :) Habe selbst auf meinem Server mehrere Unterverzeichnisse mit vers. Projekten und rufe diese immer mit http://mydomain.com/projektordner (ohne Slash) auf.

      (es wäre noch die eine oder andere Änderung in der Konfiguration des Apachen zusätzlich notwendig, aber ich werde mein Beckmesser für heute mal wieder einstecken ;-)

      genau da hört es auf. Ich habe keinen Zugriff auf httpd.conf und wie ich kürzlich festgestellt habe, kann ich den Inhalt einer .htaccess nur über Confixx verändern. Ich fühle mich traurig und in meinen Rechten verletzt.

      Gruß, Linda

      --
      2 hours of try and error can save 10 minutes of manual reading
      1. echo $begrüßung;

        Warum sollte das ein Verzeichnis sein[1]? Dann würde der Pfad doch mit einem '/' enden, oder?

        Nö, muss es nicht :)

        Natürlich muss er das. Wenn du den abschließenden / beim Anfordern eines Verzeichnisses nicht mit eingibst, senden die meisten Server einen Location-Header indem der / enthalten ist. Der Browser fordert dann noch einmal korrekt das Verzeichnis mit abschließendem / an.

        Was würde passieren, wenn dem nicht so wäre?
        Mal angenommen, unter http://example.org/dir wird eine HTML-Ressource ausgeliefert, die einen Verweis auf image.png enthält. Der Browser würde "dir" weglassen und http://example.org/image.png anfordern und nicht http://example.org/dir/image.png.

        echo "$verabschiedung $name";

        1. Hallo dedlfix,

          Warum sollte das ein Verzeichnis sein[1]? Dann würde der Pfad doch mit einem '/' enden, oder?

          Nö, muss es nicht :)

          Natürlich muss er das. Wenn du den abschließenden / beim Anfordern eines Verzeichnisses nicht mit eingibst, senden die meisten Server einen Location-Header indem der / enthalten ist. Der Browser fordert dann noch einmal korrekt das Verzeichnis mit abschließendem / an.

          OK. Mit den HTTP-Header kenne ich mich nicht aus. Daher für einen unerfahrenen User (me :)) sieht die URL-Angabe http://mydomain.com/ordner aus, wie Unterverzeichnis. Weil da ja auch ein Unterverzeichnis existiert und die Inhalte dementsprechend geladen werden. Was der Browser und Server unter einander ausmachen und wer wem was sendet, sehe ich ja nicht. Jetzt weiß ich es auch :) Danke.

          Gruß, Linda

          --
          2 hours of try and error can save 10 minutes of manual reading
          1. echo $begrüßung;

            Daher für einen unerfahrenen User (me :)) sieht die URL-Angabe http://mydomain.com/ordner aus, wie Unterverzeichnis.

            Ich als mittlerweile erfahrener User, kann das nicht (mehr). :-)

            Weil da ja auch ein Unterverzeichnis existiert und die Inhalte dementsprechend geladen werden.

            Da scheinst du unzulässigerweise von _einer_ dir bekannten Situation auf alle zu schließen.

            Es gibt da im Apachen zwei Handler, die auf die Namen server-status und server-info hören. Diese werden beispielsweise mittels

            <Location /server-info>
                SetHandler server-info
              </Location>

            konfiguriert und dann so aufgerufen: http://example.org/server-info, ohne dass es irgendwo ein Verzeichnis namens server-info gibt.

            Noch ein Beispiel ist die PathInfo: http://example.org/foo/bar/script.php/pathinfo1/pathinfo2

            Hier ruft der Apache das Script document_root/foo/bar/script.php auf. /pathinfo1/pathinfo2 kann man dann in $_SERVER["PATH_INFO"] finden. Alles hinter bar sind keine Verzeichnisse, obwohl die "so aussehen".

            Ganz zu schweigen von den "Schweinereien", die man mit mod_rewrite anstellen kann...

            Was der Browser und Server unter einander ausmachen und wer wem was sendet, sehe ich ja nicht.

            Doch doch, du musst nur mal aufmerksam das Adressen-Eingabefeld deines Browsers betrachten.

            echo "$verabschiedung $name";

            1. Hallo dedlfix,

              Da scheinst du unzulässigerweise von _einer_ dir bekannten Situation auf alle zu schließen.

              Es kam schon paar Mal vor. Wie ich in diesem Posting gelernt habe,  ist es häufig mod_rewrite. Und ich dachte es wären Verzeichnisse, ehrlich :)

              Doch doch, du musst nur mal aufmerksam das Adressen-Eingabefeld deines Browsers betrachten.

              Wunder!! Ich habe es gesehen :) Tatsache. Der Slash kommt von alleine nach Absenden der URL. Bei meinem mod_rewrite dagegen bleibt die URL ohne Slash am Ende. Jetz bin auch ganz schlau :)

              Gruß, Linda

              --
              2 hours of try and error can save 10 minutes of manual reading
    2. Hello,

      Ich habe aber schon mehrmals die Seiten gesehen, wo die Links nicht auf einen Dateinamen, sondern scheinbar auf ein Verzeichnis zeigen. In meinem Beispiel wäre dies: http://mydomain.com/new_user

      Warum sollte das ein Verzeichnis sein[1]? Dann würde der Pfad doch mit einem '/' enden, oder?

      Da erinnere ich an meinen Hiweis der letzten Tage auf dirname()
      http://de.php.net/manual/de/function.dirname.php

      Die Aufweichung der über 30 Jahre gewachsenen und ausgearbeiteten Konventionen zum allgeinen Verständnis wird seit mindestens 12 Jahren intensiv von einer Firma betrieben, die Out-of-th-Box-Betriebssysteme vertreibt und damit sogar den höchsten Verbreitungsgrad erreicht hat. Die Bequemlichkeit des Menschen ist eben immer noch das beste Verkaufsförderungsinstrument.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
  4. Linda,
    Hinter einem URI wie http://example.net/foo muss nicht ein Verzeichnis foo oder eine Datei foo stecken. Es kann auch was anderes dahinter stecken: content negotiation.

    Seien http://example.net/foo.html ein HTML-Dokument und http://example.net/foo.pdf ein PDF-Dokument. Auf Anforderung von http://example.net/foo sendet der (entsprechend konfigurierte) Server eins von beidem, je nachdem, ob der Client lieber text/html oder application/pdf hätte.

    Genauso ließen sich auch Grafiken als PNG, GIF, JPEG und SVG nebeneinander anbieten. Wenn der Client mit SVG nichts anfangen kann, hat er es eben nicht in seiner Liste der akzepierten MIME-Typen und bekommt vom Server die Grafik in einem anderen Format, das er darstellen kann.

    Bei einer Website, die ich betreue, verwende ich nur noch ausschließlich URIs ohne Dateiendung. Warum soll sich der Nutzer wundern, warum es http://example.net/foo.shtml und nicht http://example.net/foo.html heißt? Und vielleicht reicht SSI eines Tages für eine Seite nicht mehr aus und sie wäre dann http://example.net/foo.php, aber immer noch unter dem alten URI http://example.net/foo erreichbar. Cool links don’t change.

    Gunnar

    --
    “I got my finger on the trigger / But I don’t know who to trust” (Bruce Springsteen, Devils and Dust)